记录编号 601021 评测结果 AAAAAAAAAA
题目名称 2264.魔法传输 最终得分 100
用户昵称 Gravatar李奇文 是否通过 通过
代码语言 C++ 运行时间 0.552 s
提交时间 2025-05-24 15:36:35 内存使用 5.50 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
#define ls (p<<1)
#define rs (p<<1|1)
using namespace std;
const int N=100010;
const int MOD=1e9+7;
struct Seg
{
    int val,tag;
}a[4*N];
int n,m;
char c[3];
void push_up(int p){a[p].val=(a[ls].val+a[rs].val)%MOD;}
int push_down(int p,int l,int r)
{
    int mid=(l+r)/2;
    if(a[p].tag)
    {
        a[ls].val=(a[ls].val+a[p].tag*(mid-l+1))%MOD;
        a[ls].tag=(a[ls].tag+a[p].tag)%MOD;
        a[rs].val=(a[rs].val+a[p].tag*(r-mid))%MOD;
        a[rs].tag=(a[rs].tag+a[p].tag)%MOD;
        a[p].tag=0;
    }
    return mid;
}
void add(int l,int r,int z,int zl,int zr,int p)
{
    if(l<=zl&&zr<=r)
    {
        a[p].val=(a[p].val+(zr-zl+1)*z)%MOD;
        a[p].tag=(a[p].tag+z)%MOD;
        return;
    }
    int mid=push_down(p,zl,zr);
    if(l<=mid) add(l,r,z,zl,mid,ls);
    if(mid<r) add(l,r,z,mid+1,zr,rs);
    push_up(p);
    return;
}
int query(int l,int r,int zl,int zr,int p)
{
    if(l<=zl&&zr<=r) return a[p].val;
    int mid=push_down(p,zl,zr),ans=0;
    if(l<=mid) ans=(ans+query(l,r,zl,mid,ls))%MOD;
    if(mid<r) ans=(ans+query(l,r,mid+1,zr,rs))%MOD;
    return (ans+MOD)%MOD;
}
signed main()
{
    freopen("magics.in","r",stdin);
    freopen("magics.out","w",stdout);
    scanf("%lld%lld",&n,&m);
    for(int i=1,l,r;i<=m;i++)
    {
        scanf("%s",c);
        if(c[0]=='C')
        {
            scanf("%lld%lld",&l,&r);
            add(l,r,1,1,n,1);
            if(r!=n) add(r+1,r+1,l-r-1,1,n,1);
        }
        else{
        	scanf("%lld",&l); 
			printf("%lld\n",query(1,l,1,n,1));
		}
    }
    return 0;
}