Submission #1324919

#TimeUsernameProblemLanguageResultExecution timeMemory
1324919edga1Sterilizing Spray (JOI15_sterilizing)C++20
10 / 100
49 ms4324 KiB
#include <bits/stdc++.h>
#define ll long long

using namespace std;

int st[300000];
int c[100005];

void update(int x, int xl, int xr, int p, int v){
    if(xl==xr){
        st[x]=v;
        return;
    }
    int mid=(xl+xr)/2;
    if(mid>=p) update(x*2+1,xl,mid,p,v);
    else update(x*2+2,mid+1,xr,p,v);
    st[x]=st[x*2+1]+st[x*2+2];
    return;
}

int sum(int x, int xl, int xr, int l, int r){
    if(xl>=l && xr<=r) return st[x];
    if(r<xl || l>xr) return 0;
    int mid=(xl+xr)/2;
    return sum(x*2+1,xl,mid,l,r)+sum(x*2+2,mid+1,xr,l,r);
}

void build(int x, int xl, int xr){
    if(xl==xr){
        st[x]=c[xl];
        return;
    }
    int mid=(xl+xr)/2;
    build(x*2+1,xl,mid);
    build(x*2+2,mid+1,xr);
    st[x]=st[x*2+1]+st[x*2+2];
    return;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n,q,k; cin>>n>>q>>k;
    set<int> se;
    for(int i=1; i<=n; i++){
        cin>>c[i];
        if(c[i]==1) se.insert(i);
    }
    build(0,1,n);
    for(int i=0; i<q; i++){
        int s,t,u;
        cin>>s>>t>>u;
        if(s==1){
            update(0,1,n,t,u);
            if(u==1) se.insert(t);
            else{
                auto a=se.find(t);
                if(a!=se.end()) se.erase(a);
            }
        }
        if(s==2 && k!=1){
            auto l=se.lower_bound(t),r=se.upper_bound(u);
            while(l!=r){
                int p=(*l);
                update(0,1,n,p,0);
                auto ne=next(l,1);
                se.erase(l);
                l=ne;
            }
        }
        if(s==3){
            cout<<sum(0,1,n,t,u)<<'\n';
        }
    }
    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...