This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |