Submission #154730

#TimeUsernameProblemLanguageResultExecution timeMemory
154730Pro_ktmrStreet Lamps (APIO19_street_lamps)C++14
20 / 100
1709 ms29232 KiB
#include"bits/stdc++.h" using namespace std; #define LL long long #define MP make_pair //RMaxQ RUQ struct SegmentTree{ private: int N; vector<long long> node, lazy; vector<bool> lazyFlg; public: void init(int n){ N = 1; while(N < n) N *= 2; node.clear(); lazy.clear(); lazyFlg.clear(); for(int i=0; i<N*2-1; i++){ node.push_back(1000000000); lazy.push_back(0); lazyFlg.push_back(false); } } void eval(int k, int l, int r){ if(lazyFlg[k] == false) return; node[k] = lazy[k]; lazyFlg[k] = false; if(r-l > 1){ lazy[2*k+1] = lazy[k]; lazyFlg[2*k+1] = true; lazy[2*k+2] = lazy[k]; lazyFlg[2*k+2] = true; } } void update(int a, int b, long long x, int k=0, int l=0, int r=-1){ if(r == -1) r = N; eval(k, l, r); if(r <= a || b <= l) return; if(a <= l && r <= b){ lazy[k] = x; lazyFlg[k] = true; eval(k, l, r); } else{ update(a, b, x, 2*k+1, l, (l+r)/2); update(a, b, x, 2*k+2, (l+r)/2, r); node[k] = max(node[2*k+1], node[2*k+2]); } } long long query(int a, int b, int k=0, int l=0, int r=-1){ if(r == -1) r = N; eval(k, l, r); if(r <= a || b <= l) return -1; if(a <= l && r <= b) return node[k]; else return max(query(a, b, 2*k+1, l, (l+r)/2), query(a, b, 2*k+2, (l+r)/2, r)); } }; int N,Q; string def; int t[300000],a[300000],b[300000]; SegmentTree st; int main(){ cin >> N >> Q; st.init(N); cin >> def; for(int i=0; i<N; i++){ if(def[i] == '1') st.update(i, i+1, 0); } for(int i=0; i<Q; i++){ string type; cin >> type; if(type == "toggle"){ t[i] = 0; cin >> a[i]; a[i]--; st.update(a[i], a[i]+1, i+1); } else{ t[i] = 1; cin >> a[i] >> b[i]; a[i]--; b[i]--; int tmp = st.query(a[i], b[i]); if(tmp == 1000000000) cout << 0 << endl; else cout << i+1 - tmp << endl; } } 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...