Submission #1257339

#TimeUsernameProblemLanguageResultExecution timeMemory
1257339proofySimple game (IZhO17_game)C++20
100 / 100
53 ms9544 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

const int N = 1000123;
int fenw[N];

void add(int i, int v) {
    for (++i; i < N; i += (i & -i)) fenw[i] += v;
}
int query(int i) {
    int res = 0;
    for (++i; i > 0; i -= (i & -i)) res += fenw[i];
    return res;
}

void add_range(int l, int r, int v) {
    add(l, v);
    add(r + 1, -v);
}

int h[N];

void add_contribution(int x, int y) {
    if (x > y) swap(x, y);
    add_range(x, y, 1);
}
void remove_contribution(int x, int y) {
    if (x > y) swap(x, y);
    add_range(x, y, -1);
}


int32_t main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

    int n, q;
    cin >> n >> q;
    for (int i = 1; i <= n; i++) cin >> h[i];

    for (int i = 1; i < n; i++) {
      add_contribution(h[i], h[i + 1]);
    }


    while (q--) {
        int t;
        cin >> t;
        if (t == 1) {
            int i, v;
            cin >> i >> v;
            if (i > 1) remove_contribution(h[i - 1], h[i]);
            if (i + 1 <= n) remove_contribution(h[i + 1], h[i]);

            h[i] = v;

            if (i > 1) add_contribution(h[i - 1], h[i]);
            if (i + 1 <= n) add_contribution(h[i + 1], h[i]);
        } else {
            int x;
            cin >> x;

            cout << query(x) << "\n";
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...