Submission #1196867

#TimeUsernameProblemLanguageResultExecution timeMemory
1196867cpdreamerStreet Lamps (APIO19_street_lamps)C++20
20 / 100
478 ms8044 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define V vector
#define pb push_back
struct segtree {
private:
    struct node {
        int maxd;
    };
    node single(int v) {
        return {v};
    }
    node neutral={INT_MIN};
    node merge(node a,node b) {
        return {max(a.maxd,b.maxd)};
    }
public:
    int size;
    V<node>query;
    void init(int n) {
        size=1;
        while (size<n)size*=2;
        query.assign(2*size,{INT_MIN});
    }
    void set(int i,int v,int x,int lx,int rx){
        if (rx-lx==1) {
            query[x]=single(v);
            return;
        }
        int m=(lx+rx)/2;
        if (i<m)
            set(i,v,2*x+1,lx,m);
        else
            set(i,v,2*x+2,m,rx);
        query[x]=merge(query[2*x+1],query[2*x+2]);
    }
    void set(int i,int v) {
        set(i,v,0,0,size);
    }
    node calc(int l,int r,int x,int lx,int rx) {
        if (lx>=r || rx<=l)return neutral;
        if (l<=lx && rx<=r)return query[x];
        int m=(lx+rx)/2;
        node a=calc(l,r,2*x+1,lx,m);
        node b=calc(l,r,2*x+2,m,rx);
        return merge(a,b);
    }
    int calc(int l,int r) {
        return calc(l,r,0,0,size).maxd;
    }
};
void solve() {
    int n;
    cin>>n;
    int q;
    cin>>q;
    string s;
    cin>>s;
    V<int>ans(n,-1);
    segtree tree;
    tree.init(n);
    for (int i=0;i<n;i++) {
        if (s[i]=='1') {
            tree.set(i,0);
        }
        else {
            tree.set(i,INT_MAX);
        }
    }
    for (int i=1;i<=q;i++) {
        string t;
        cin>>t;
        if (t=="query") {
            int l,r;
            cin>>l>>r;
            l--,r--;
            if (tree.calc(l,r)==INT_MAX) {
                cout<<0<<endl;
            }
            else {
                cout<<i-tree.calc(l,r)<<endl;
            }
        }
        else {
            int a;
            cin>>a;
            a--;
            tree.set(a,i);
        }
    }
 }
 int main() {
   solve();


}
#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...