Submission #1208805

#TimeUsernameProblemLanguageResultExecution timeMemory
1208805avohadoStreet Lamps (APIO19_street_lamps)C++20
40 / 100
165 ms10944 KiB
#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define maxn 300005
#define f first
#define s second
#define ll long long
#define pb(x) push_back(x)
int n, m;
string s;
int mtree[maxn*4], xtree[maxn*4], a[maxn];
void bt(int v, int tl, int tr){
    if(tl==tr){
        if(s[tl]=='1'){
            mtree[v]=INT_MAX;
            xtree[v]=0;
        }else{
            mtree[v]=0;
            xtree[v]=-1;
        }
        return;
    }
    int tm=(tr+ tl)/2;
    bt(v*2, tl, tm);
    bt(v*2+1, tm+1, tr);
    mtree[v]=min(mtree[v*2], mtree[v*2+1]);
    xtree[v]=max(xtree[v*2], xtree[v*2+1]);
}
void upd(int v, int l, int tl, int tr, int j){
    if(tl==tr){
        if(s[tl]=='1'){
            s[tl]='0';
            mtree[v]=j-xtree[v]+1;
            xtree[v]=-1;
        }else{
            s[tl]='1';
            xtree[v]=j-mtree[v]+1;
            mtree[v]=INT_MAX;
        }
        return;
    }
    int tm=(tl+tr)/2;
    if(tm<l){
        upd(v*2+1, l, tm+1, tr, j);
    }else{
        upd(v*2, l, tl, tm, j);
    }
    mtree[v]=min(mtree[v*2], mtree[v*2+1]);
    xtree[v]=max(xtree[v*2], xtree[v*2+1]);
}
pair<int,int> res(int v, int l, int r, int tl, int tr){
    if(tl>r||l>tr){
        return {INT_MAX, -1};
    }
    if(l<=tl&&tr<=r){
        return {mtree[v], xtree[v]};
    }
    pair<int, int> a=res(v*2, l, r, tl, (tl+tr)/2), b=res(v*2+1, l, r,(tl+tr)/2+1, tr);
    return {min(a.f,b.f), max(a.s, b.s)};
}
void solve(){
    cin >> n >> m;
    cin >> s;
    string s1;
    bt(1, 0, n-1);
    for(int i=0; i<m; i++){
        cin >> s1;
        if(s1[0]=='q'){
            int l, r;
            cin >> l >> r;
            l--; r-=2;
            pair<int, int> a=res(1, l, r, 0, n-1);
            cout << min(a.f, i+1-a.s);
            cout << "\n";
        }else{
            int x;
            cin >> x;
            upd(1, x-1, 0, n-1, i);
        }
    }
}
int main(){
    cin.tie(nullptr)->sync_with_stdio(0);
    int t=1;
    //cin >> t;
    while(t--){
        solve();
        cout << "\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...
#Verdict Execution timeMemoryGrader output
Fetching results...