比赛 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;
}