Submission #92538

#TimeUsernameProblemLanguageResultExecution timeMemory
92538Nodir_BobievSimple game (IZhO17_game)C++14
100 / 100
357 ms9564 KiB
# include <iostream> using namespace std; const int N = 1e5 + 100; const int M = 1e6 + 100; int TREE[3 * M]; int h[N]; int n, m; void update(int l, int r, int tl, int tr, int pos, int x) { if(tl > tr) return; if(tr < l) return; if(tl > r) return; //cout << l << ' ' << r << ' ' << tl << ' ' << tr << ' ' << pos << ' ' << x << endl; if(tl >= l && tr <= r){ TREE[pos] += x; //cout << "True" << endl; } else{ int tm = (tl + tr) >> 1; update(l, r, tl, tm, (pos << 1), x); update(l, r, tm + 1, tr, ((pos << 1) + 1), x); } } int get(int tl, int tr, int H, int pos) { if(tl == tr) return TREE[pos]; if(tl > tr) return 0; else{ int tm = (tl + tr) >> 1; if(tl <= H && tm >= H) return TREE[pos] + get(tl, tm, H, (pos << 1)); else return TREE[pos] + get(tm + 1, tr, H, ((pos << 1) + 1)); } } void printTREE() { for (int i = 1; i <= 20; i++) cout << TREE[i] << ' '; cout << endl; } int main() { cin >> n >> m; for (int i = 1; i <= n; i++) cin >> h[i]; for (int i = 1; i < n; i++){ int l = min(h[i], h[i + 1]); int r = max(h[i], h[i + 1]); update(l, r, 1, M, 1, +1); } while(m--){ int t; cin >> t; if(t == 1){ int pos, val, l, r; cin >> pos >> val; if(pos != 1){ l = min(h[pos], h[pos - 1]); r = max(h[pos], h[pos - 1]); update(l, r, 1, M, 1, -1); l = min(val, h[pos - 1]); r = max(val, h[pos - 1]); update(l, r, 1, M, 1, +1); } if(pos != n){ l = min(h[pos], h[pos + 1]); r = max(h[pos], h[pos + 1]); update(l, r, 1, M, 1, -1); l = min(val, h[pos + 1]); r = max(val, h[pos + 1]); update(l, r, 1, M, 1, +1); } h[pos] = val; } else{ int H; cin >> H; cout << get(1, M, H, 1) << endl ; } } /* while(true){ int l, r; cin >> l >> r; update(l, r, 1, M, 1, +1); printTREE(); } */ } /* 3 3 1 5 1 2 3 1 1 5 2 3 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...