| 比赛 |
2026.9.5 |
评测结果 |
WWAAAAAAWAWWWWW |
| 题目名称 |
To-Do List |
最终得分 |
46 |
| 用户昵称 |
rzzakioi |
运行时间 |
11.948 s |
| 代码语言 |
C++ |
内存使用 |
38.20 MiB |
| 提交时间 |
2026-09-05 11:54:57 |
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e6+3;
int q,tr[8000050],sum;
bool lz[8000050];
void build(int k,int l,int r){
if(l==r){
tr[k]=1;
return;
}
int mid=(l+r)>>1;
build(k*2,l,mid);
build(k*2+1,mid+1,r);
tr[k]=tr[k*2]+tr[k*2+1];
}
void lazy(int k,int l,int r,int v){
tr[k]=0;
lz[k]=1;
}
void pushdown(int k,int l,int r,int mid){
if(lz[k]){
lazy(k*2,l,mid,lz[k]);
lazy(k*2+1,mid+1,r,lz[k]);
lz[k]=0;
}
}
void update(int k,int l,int r,int x,int y,int v){
if(x>y)return;
if(x<=l&&r<=y){
lazy(k,l,r,v);
return;
}
int mid=(l+r)>>1;
pushdown(k,l,r,mid);
if(x<=mid)update(k*2,l,mid,x,y,v);
if(y>mid)update(k*2+1,mid+1,r,x,y,v);
tr[k]=tr[k*2]+tr[k*2+1];
}
int querysum(int k,int l,int r,int x,int y){
if(x>y)return 0;
if(x<=l&&r<=y)return tr[k];
if(r<x||y<l)return 0;
int mid=(l+r)>>1;
pushdown(k,l,r,mid);
return querysum(k*2,l,mid,x,y)+querysum(k*2+1,mid+1,r,x,y);
}
int query(int k,int l,int r,int v){
if(l==r){
if(v==0)return l-1;
else{
if(l==mod*2){
sum+=v;
if(tr[k]==1)sum--;
}
return l;
}
}
int mid=(l+r)>>1;
pushdown(k,l,r,mid);
// cout<<l<<' '<<r<<' '<<v<<' '<<tr[k]<<'\n';
if(tr[k*2]<=v)return query(k*2+1,mid+1,r,v-tr[k*2]);
else return query(k*2,l,mid,v);
}
int solve(int k,int l,int r){
if(l==r){
if(tr[k]==1)return l-1;
else return l;
}
int mid=(l+r)>>1;
pushdown(k,l,r,mid);
if(tr[k*2+1]==r-mid)return solve(k*2,l,mid);
else return solve(k*2+1,mid+1,r);
}
signed main(){
freopen("List.in","r",stdin);
freopen("List.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>q;
int lst=0;
build(1,0,mod*2);
while(q--){
char ch;
int x,y;
cin>>ch;
if(ch=='A'){
cin>>x>>y;
x=(x+lst)%mod;
y=(y+lst)%mod;
// cout<<x<<' '<<y<<'\n';
int pre=querysum(1,0,mod*2,0,x-1);
int pos=query(1,0,mod*2,pre+y);
// cout<<pre<<' '<<pos<<'\n';
update(1,0,mod*2,x,pos,0);
}
if(sum)lst=mod*2+sum;
else lst=solve(1,0,mod*2);
cout<<lst<<'\n';
}
return 0;
}