제출 #1291033

#제출 시각아이디문제언어결과실행 시간메모리
1291033LIASimple game (IZhO17_game)C++17
100 / 100
96 ms18160 KiB
// // Created by liasa on 14/11/2025. // #include <bits/stdc++.h> using namespace std; #define ll long long #define vll vector<ll> struct Seg { vll seg; ll sz = 1; Seg(ll n) { for (; sz < n; sz *= 2) ; seg.resize(2 * sz); } void up(ll x, ll v) { x += sz; seg[x] += v; for (x /= 2; x > 0; x /= 2) seg[x] = seg[x * 2] + seg[x * 2 + 1]; } ll q(ll l, ll r) { l += sz, r += sz; ll ans = 0; while (l <= r) { if ((l & 1)) ans += seg[l++]; if (!(r & 1)) ans += seg[r--]; l /= 2; r /= 2; } return ans; } }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll n, m; cin >> n >> m; vll h(n); ll sz = 1e6 + 2; Seg seg(sz + 5); for (ll i = 0; i < n; ++i) { cin >> h[i]; if (i != 0) { ll a = h[i - 1], b = h[i]; if (a > b) swap(a, b); if (a != b) { seg.up(a + 1, 1); seg.up(b, -1); } } } while (m--) { ll t; cin >> t; if (t == 2) { ll y; cin >> y; cout << seg.q(0, y) << '\n'; } else { ll idx, val; cin >> idx >> val; idx--; if (idx - 1 >= 0) { ll a = h[idx - 1], b = h[idx]; if (a > b) swap(a, b); if (a != b) { seg.up(a + 1, -1); seg.up(b, +1); } } if (idx + 1 < n) { ll a = h[idx], b = h[idx + 1]; if (a > b) swap(a, b); if (a != b) { seg.up(a + 1, -1); seg.up(b, +1); } } h[idx] = val; if (idx - 1 >= 0) { ll a = h[idx - 1], b = h[idx]; if (a > b) swap(a, b); if (a != b) { seg.up(a + 1, +1); seg.up(b, -1); } } if (idx + 1 < n) { ll a = h[idx], b = h[idx + 1]; if (a > b) swap(a, b); if (a != b) { seg.up(a + 1, +1); seg.up(b, -1); } } } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...