记录编号 |
601026 |
评测结果 |
AAAAAAAAAA |
题目名称 |
2264.魔法传输 |
最终得分 |
100 |
用户昵称 |
二乾五 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.965 s |
提交时间 |
2025-05-24 15:42:39 |
内存使用 |
5.32 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
ll n,m,a[100050],st[400050],lztg[400050];
void pd(ll l,ll r,ll mid,ll k){
st[k<<1]+=(mid-l+1)*lztg[k];
st[k<<1|1]+=(r-mid)*lztg[k];
lztg[k<<1]+=lztg[k];
lztg[k<<1|1]+=lztg[k];
lztg[k]=0;
}
void stadd(ll l,ll r,ll k,ll s,ll e,ll x){
if(s<=l&&r<=e){
st[k]+=(r-l+1)*x;
lztg[k]+=x;
return;
}
if(s>r||e<l){
return;
}
ll mid=(l+r)>>1;
if(lztg[k]){
pd(l,r,mid,k);
}
stadd(l,mid,k<<1,s,e,x);
stadd(mid+1,r,k<<1|1,s,e,x);
st[k]=(st[k<<1]+st[k<<1|1])%mod;
}
ll stsum(ll l,ll r,ll k,ll s,ll e){
if(s<=l&&r<=e){
return st[k];
}
if(s>r||e<l){
return 0;
}
ll mid=(l+r)>>1;
if(lztg[k]){
pd(l,r,mid,k);
}
return stsum(l,mid,k<<1,s,e)%mod+stsum(mid+1,r,k<<1|1,s,e)%mod;
}
int main(){
cin>>n>>m;
for(ll i=1;i<=m;i++){
ll x,y,z;
char op;
cin>>op>>x;
if(op=='C'){
cin>>y;
stadd(1,n,1,x,y,1);
stadd(1,n,1,y+1,y+1,-(y-x+1));
}else{
cout<<stsum(1,n,1,1,x)%mod<<endl;
}
}
return 0;
}