Submission #1135118

#TimeUsernameProblemLanguageResultExecution timeMemory
1135118lopkusStreet Lamps (APIO19_street_lamps)C++20
20 / 100
171 ms15268 KiB
#include<bits/stdc++.h> #define int long long using namespace std; const int N = 3e5 + 5; struct segtree{ int t[4*N] = {0}; int query(int v, int tl, int tr, int l, int r) { if(tl > r || tr < l) { return 0; } if(tl >= l && tr <= r) { return t[v]; } int tm = (tl + tr) / 2; return max(query(v * 2, tl, tm, l, r), query(v * 2 + 1, tm + 1, tr, l, r)); } void update(int v, int tl, int tr, int index, int value) { if(tl == tr) { t[v] = value; } else { int tm = (tl + tr) / 2; if(index <= tm) { update(v * 2, tl, tm, index, value); } else { update(v * 2 + 1, tm + 1, tr, index, value); } t[v] = max(t[v * 2], t[v * 2 + 1]); } } }seg; signed main() { ios::sync_with_stdio(false); cin.tie(0); int n, q; cin >> n >> q; vector<int> a(n + 1); for(int i = 1; i <= n; i++) { char x; cin >> x; if(x == '1') { a[i] = 1; } else { a[i] = 0; } } vector<int> op(q + 1, - 1); for(int i = 1; i <= n; i++) { if(a[i]) { seg.update(1, 1, n, i, 0); } else { seg.update(1, 1, n, i, N); } } for(int i = 1; i <= q; i++) { string type; cin >> type; if(type == "query") { int l, r; cin >> l >> r; r -= 1; cout << max(0LL, i - seg.query(1, 1, n, l, r)) << "\n"; } else { int index; cin >> index; seg.update(1, 1, n, index, i); } } }
#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...