제출 #854560

#제출 시각아이디문제언어결과실행 시간메모리
854560The_SamuraiSimple game (IZhO17_game)C++17
100 / 100
48 ms7260 KiB
#include "bits/stdc++.h" using namespace std; using ll = long long; const int inf = 1e9, N = 1e6 + 5; struct Fenwick { vector<int> tree; int len; void init(int n) { len = n; tree.assign(len + 1, 0); } void update(int i, int v) { i++; while (i <= len) { tree[i] += v; i += i & (-i); } } int get(int i) { i++; int sum = 0; while (i > 0) { sum += tree[i]; i -= i & (-i); } return sum; } int get(int l, int r) { return get(r) - get(l - 1); } }; int main() { cin.tie(0)->sync_with_stdio(false); #ifdef sunnatov freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #else // freopen("subsequence.in", "r", stdin); // freopen("subsequence.out", "w", stdout); #endif int n, m; cin >> n >> m; vector<int> a(n + 1); Fenwick fw; fw.init(N); auto upd = [&](int i, int add) { fw.update(min(a[i - 1], a[i]), add); fw.update(max(a[i - 1], a[i]) + 1, -add); }; for (int i = 1; i <= n; i++) { cin >> a[i]; if (i > 1) upd(i, 1); } while (m--) { int op; cin >> op; if (op == 1) { int i, v; cin >> i >> v; if (i > 1) upd(i, -1); if (i < n) upd(i + 1, -1); a[i] = v; if (i > 1) upd(i, 1); if (i < n) upd(i + 1, 1); } else { int h; cin >> h; cout << fw.get(h) << '\n'; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...