Submission #1367138

#TimeUsernameProblemLanguageResultExecution timeMemory
1367138po_rag526가로등 (APIO19_street_lamps)C++20
0 / 100
95 ms12976 KiB
#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define bp '\n'
#define vp cout<<'\n';
#define all(A) A.begin(),A.end()
using pii=pair<int,int>;
const int MOD=1e9+7;
const int MNLL=-1e18;
const int MXLL=1e18;
const int N=3e5+10;
struct segment{
    vector<int>a;
    int n;
    segment(vector<int>&b):n(b.size()),a((int32_t)b.size()*4+10){
        build(1,0,n-1,b);
    }
    void build(int pos,int l,int r,vector<int>&b){
        if(l==r){
            if(b[l]==1){
                a[pos]=0;
            }else{
                a[pos]=MXLL;
            }
            return;
        }
        int mid=(l+r)/2;
        build(pos*2,l,mid,b);
        build(pos*2+1,mid+1,r,b);
        a[pos]=max(a[pos*2],a[pos*2+1]);
    }
    void update(int pos,int l,int r,int point,int t){
        //cout<<"-> "<<l<<' '<<r<<' '<<point<<'\n';
        if(l==r){
            if(l!=point)return;
            if(a[pos]==MXLL){
                a[pos]=t;
            }else{
                a[pos]=MXLL;
            }
            return;
        }
        if(l>point or r<point)return;
        int mid=(l+r)/2;
        update(pos*2,l,mid,point,t);
        update(pos*2+1,mid+1,r,point,t);
        a[pos]=max(a[pos*2],a[pos*2+1]);
    }
    int query(int pos,int l,int r,int ql,int qr){
        if(l>qr or r<ql)return MNLL;
        if(l>=ql and r<=qr){
            return a[pos];
        }
        int mid=(l+r)/2;
        return max(query(pos*2,l,mid,ql,qr),query(pos*2+1,mid+1,r,ql,qr));
    }
};

signed main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    int n,q,l,r,x;
    cin>>n>>q;
    vector<int>init;
    string h;
    cin>>h;
    for(auto&e:h)init.emplace_back(e=='1');
    segment a(init);
    for(int i=1;i<=q;++i){
        cin>>h;
        if(h=="query"){
            cin>>l>>r;
            x=a.query(1,0,n-1,l-1,r-1);
            if(x==MXLL)cout<<0;
            else cout<<i-x;
            vp
        }else{
            cin>>x;
            a.update(1,0,n-1,x-1,i);
        }
    }
}

/*
5 7
11011
query 1 2
query 1 2
query 1 6
query 3 4
toggle 3
query 3 4
query 1 6

*/
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...