//
// 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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |