| 记录编号 |
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(){;}