比赛 2025.5.24 评测结果 AAAAAAAAAA
题目名称 魔法传输 最终得分 100
用户昵称 djyqjy 运行时间 0.499 s
代码语言 C++ 内存使用 4.67 MiB
提交时间 2025-05-24 10:02:25
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define ls (p<<1)
#define rs (p<<1|1)
using namespace std;
inline int re()
{
    int f=1,num=0;
    char c=getchar();
    while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') num=num*10+c-'0',c=getchar();
    return num*f;
}
const int N=100010;
const ll 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);
    n=re();m=re();
    for(int i=1,l,r;i<=m;i++)
    {
        scanf("%s",c);
        if(c[0]=='C')
        {
            l=re();r=re();
            add(l,r,1,1,n,1);
            if(r!=n) add(r+1,r+1,l-r-1,1,n,1);
        }
        else printf("%lld\n",query(1,re(),1,n,1));
    }
    return 0;
}