Submission #721816

#TimeUsernameProblemLanguageResultExecution timeMemory
721816Darren0724Street Lamps (APIO19_street_lamps)C++17
20 / 100
973 ms45084 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin(),x.end()
const int INF=1e18;
struct seg{
    seg *lc,*rc;
    int l,r,m;
    int mx=INF;
    seg(int l1,int r1){
        l=l1,r=r1;
        m=(l+r)>>1;
        if(r-l==1){
            return;
        }
        lc=new seg(l,m);
        rc=new seg(m,r);
    }
    void add(int p,int x){
        if(r-l==1){
           mx=x;
           return;
        }
        if(p<m){
            lc->add(p,x);
        }
        else{
            rc->add(p,x);
        }
        mx=max(lc->mx,rc->mx);
    }
    int ask(int a,int b){
        if(a<=l&&b>=r){
            //cout<<mx<<endl;
            return mx;
        }
        int ans=-INF;
        if(a<m){
            ans=max(ans,lc->ask(a,b));
        }
        if(b>m){
            ans=max(ans,rc->ask(a,b));
        }
        return ans;
    }
};
int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n,q;cin>>n>>q;
    vector<int> a(n);
    seg *tr=new seg(0,n);
    for(int i=0;i<n;i++){
        char c;cin>>c;
        a[i]=c-'0'-1;
        if(a[i]==0){
            tr->add(i,0);
        }
    }
    vector<int> ans(n);
    for(int i=1;i<=q;i++){
        string s;cin>>s;
        if(s=="query"){
            int x,y;cin>>x>>y;x--;y--;
            int p=tr->ask(x,y);
            //cout<<p<<endl;
            p=min(p,i);
            cout<<i-p<<endl;
        }
        else{
            int p;cin>>p;p--;
            tr->add(p,i);
        }
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...