Submission #900317

#TimeUsernameProblemLanguageResultExecution timeMemory
900317Perl32Simple game (IZhO17_game)C++14
100 / 100
44 ms5460 KiB
//I wrote this code 4 u <3
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif

const int maxN = (int) 1e6 + 1e3;

template<typename T>
struct Bit { // [l, r)
    vector<T> t;
    int sz;

    Bit(int n) : t(n + 1), sz(n) {}

    void upd(int i, int val) {
        for (++i; i <= sz; i += i & -i) {
            t[i] += val;
        }
    }

    T get(int x) {
        ll ret = 0;
        for (; x; x -= x & -x) {
            ret += t[x];
        }
        return ret;
    }

    T get(int l, int r) {
        return get(r) - get(l);
    }
};

signed main(int32_t argc, char *argv[]) {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m;
    cin >> n >> m;
    vector<int> a(n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }
    Bit<int> bit(maxN);
    auto add = [&](int l, int r, int v) {
        if (l > r) {
            swap(l, r);
        }
        bit.upd(l, v);
        bit.upd(r + 1, -v);
    };
    for (int i = 0; i < n - 1; ++i) {
        add(a[i], a[i + 1], 1);
    }
    while (m--) {
        int t;
        cin >> t;
        if (t == 1) {
            int i, v;
            cin >> i >> v;
            --i;
            if (i > 0) {
                add(a[i], a[i - 1], -1);
                add(v, a[i - 1], 1);
            }
            if (i < n - 1) {
                add(a[i], a[i + 1], -1);
                add(v, a[i + 1], 1);
            }
            a[i] = v;
        } else {
            int h;
            cin >> h;
            cout << bit.get(h + 1) << '\n';
        }
    }
}

/*

 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...