记录编号 601035 评测结果 AAAAAAAAAA
题目名称 2264.魔法传输 最终得分 100
用户昵称 Gravatar会挽弯弓满月 是否通过 通过
代码语言 C++ 运行时间 0.462 s
提交时间 2025-05-24 16:32:28 内存使用 5.45 MiB
显示代码纯文本
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10,mod=1000000007;
ll read(){
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return f*x;
}
ll n,m;
char c;
ll a[4*N],tag[4*N];
void sc(ll p){
	a[p]=(a[p*2]+a[p*2+1])%mod;
	return;
}
void xc(ll p,ll l,ll r){
	if(tag[p]==0) return;
	ll mid=(l+r)>>1;
	a[p*2]=(a[p*2]+tag[p]*(mid-l+1))%mod;
	a[p*2+1]=(a[p*2+1]+tag[p]*(r-mid))%mod;
	tag[p*2]=(tag[p*2]+tag[p])%mod;
	tag[p*2+1]=(tag[p*2+1]+tag[p])%mod;
	tag[p]=0;
	return;
}
void insert(ll p,ll l,ll r,ll ls,ll rs,ll d){
	if(l==ls&&r==rs){
		a[p]=(a[p]+(r-l+1)*d)%mod;
		tag[p]=(tag[p]+d)%mod;
		return;
	}
	xc(p,l,r);
	ll mid=(l+r)>>1;
	if(rs<=mid) insert(p*2,l,mid,ls,rs,d);
	else if(mid<ls) insert(p*2+1,mid+1,r,ls,rs,d);
	else{
		insert(p*2,l,mid,ls,mid,d);
		insert(p*2+1,mid+1,r,mid+1,rs,d);
	}
	sc(p);
	return;
}
ll query(ll p,ll l,ll r,ll ls,ll rs){
	if(l==ls&&r==rs) return a[p];
	xc(p,l,r);
	ll mid=(l+r)>>1;
	if(rs<=mid) return query(p*2,l,mid,ls,rs);
	else if(mid<ls) return query(p*2+1,mid+1,r,mid+1,rs);
	ll res=0;
	res=(res+query(p*2,l,mid,ls,mid))%mod;
	res=(res+query(p*2+1,mid+1,r,mid+1,rs))%mod;
	return (res+mod)%mod;
}
int main(){
	freopen("magics.in","r",stdin);
	freopen("magics.out","w",stdout);
	n=read();m=read();
	ll l,r,ans;
	for(ll i=1;i<=m;i++){
		c=getchar();
		if(c=='C'){
			l=read();r=read();
			insert(1,1,n,l,r,1);
			if(r!=n) insert(1,1,n,r+1,r+1,l-r-1);
		}
		else{
			l=read();
			ans=query(1,1,n,1,l);
			printf("%lld\n",ans);
		}
	}
	return 0;
}