记录编号 295256 评测结果 AAAAAAAAAA
题目名称 2264.魔法传输 最终得分 100
用户昵称 AntiLeaf 是否通过 通过
代码语言 C++ 运行时间 0.271 s
提交时间 2016-08-13 16:04:30 内存使用 1.34 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
namespace mine{
	inline int getint(){
		static int __c,__x;
		static bool __neg;
		__x=0;
		__neg=false;
		do __c=getchar();while(__c==' '||__c=='\n'||__c=='\r'||__c=='\t');
		if(__c=='-'){
			__neg=true;
			__c=getchar();
		}
		for(;__c>='0'&&__c<='9';__c=getchar())__x=__x*10+(__c^48);
		if(__neg)return -__x;
		return __x;
	}
	inline void putint(int __x){
		static int __a[40],__i,__j;
		static bool __neg;
		__neg=__x<0;
		if(__neg)__x=-__x;
		__i=0;
		do{
			__a[__i++]=__x%10+48;
			__x/=10;
		}while(__x);
		if(__neg)putchar('-');
		for(__j=__i-1;__j^-1;__j--)putchar(__a[__j]);
	}
}
using namespace mine;
const int maxn=100010,MOD=1000000007;
void add(int,int,int);
void query(int,int,int);
void pushdown(int,int,int);
int n,m,s,t,x,ans,a[maxn<<2]={0},lazy[maxn<<2]={0};
char c;
inline int MAIN(){
#define MINE
#ifdef MINE
	freopen("magics.in","r",stdin);
	freopen("magics.out","w",stdout);
#endif
	n=getint();
	m=getint();
	while(m--){
		do c=getchar();while(c^'C'&&c^'Q');
		if(c=='C'){
			s=getint();
			t=getint();
			x=1;
			add(1,n,1);
			x=s-t-1;
			s=++t;
			add(1,n,1);
		}
		else if(c=='Q'){
			s=1;
			t=getint();
			ans=0;
			query(1,n,1);
			putint(ans);
			putchar('\n');
		}
	}
	return 0;
}
inline void add(int l,int r,int rt){
	if(s<=l&&t>=r){
		(a[rt]+=x*(r-l+1))%=MOD;
		(lazy[rt]+=x)%=MOD;
		return;
	}
	pushdown(l,r,rt);
	int mid=(l+r)>>1;
	if(s<=mid)add(l,mid,rt<<1);
	if(t>mid)add(mid+1,r,rt<<1|1);
	a[rt]=(a[rt<<1]+a[rt<<1|1])%MOD;
}
inline void query(int l,int r,int rt){
	if(s<=l&&t>=r){
		(ans+=a[rt])%=MOD;
		return;
	}
	pushdown(l,r,rt);
	int mid=(l+r)>>1;
	if(s<=mid)query(l,mid,rt<<1);
	if(t>mid)query(mid+1,r,rt<<1|1);
}
inline void pushdown(int l,int r,int rt){
	int mid=(l+r)>>1;
	a[rt<<1]+=(mid-l+1)*lazy[rt];
	lazy[rt<<1]+=lazy[rt];
	a[rt<<1|1]+=(r-mid)*lazy[rt];
	lazy[rt<<1|1]+=lazy[rt];
	lazy[rt]=0;
}
int hzoier=MAIN();
int main(){;}