Submission #516836

#TimeUsernameProblemLanguageResultExecution timeMemory
516836blueStreet Lamps (APIO19_street_lamps)C++17
20 / 100
1 ms588 KiB
#include <iostream> #include <vector> #include <string> #include <algorithm> #include <set> using namespace std; using vi = vector<int>; using vvi = vector<vi>; const int mx = 100; int n, q; int s[1+mx]; set<int> offpoints; struct segtree2 { vvi toggle_stamp = vvi(1+mx, vi(1+mx, 0)); vvi total_time = vvi(1+mx, vi(1+mx, 0)); void add_triangle(int l, int r, int t) { for(int i = l; i <= r; i++) for(int j = l; j <= r; j++) toggle_stamp[i][j] = t; } void remove_triangle(int l, int r, int t) { int tt = toggle_stamp[l][r]; for(int i = l; i <= r; i++) for(int j = l; j <= r; j++) { total_time[i][j] += t - tt; } } void init() { ; } void switch_on(int i, int t) { offpoints.erase(i); auto it = offpoints.lower_bound(i); int r = *it; it--; int l = *it; remove_triangle(l+1, i-1, t); remove_triangle(i+1, r-1, t); add_triangle(l+1, r-1, t); } void switch_off(int i, int t) { auto it = offpoints.lower_bound(i); int r = *it; it--; int l = *it; offpoints.insert(i); remove_triangle(l+1, r-1, t); add_triangle(l+1, i-1, t); add_triangle(i+1, r-1, t); } int query(int l, int r, int t) { int y = *offpoints.lower_bound(l); if(y > r) return total_time[l][r] + t - toggle_stamp[l][r]; else return total_time[l][r]; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> q; string t; cin >> t; for(int i = 0; i < n; i++) s[i+1] = (t[i] == '1'); for(int i = 1; i <= n; i++) if(s[i] == 0) offpoints.insert(i); offpoints.insert(0); offpoints.insert(n+1); segtree2 S; S.init(); for(int j = 1; j <= q; j++) { string qr; cin >> qr; if(qr == "toggle") { int i; cin >> i; if(s[i] == 0) { s[i] = 1; S.switch_on(i, j); } else { s[i] = 0; S.switch_off(i, j); } } else { int a, b; cin >> a >> b; cout << S.query(a, b-1, j) << '\n'; } } }
#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...