Submission #886295

#TimeUsernameProblemLanguageResultExecution timeMemory
886295boris_mihovSimple game (IZhO17_game)C++17
100 / 100
50 ms6984 KiB
#include <algorithm>
#include <iostream>
#include <numeric>
#include <cassert>
#include <bitset>
#include <vector>

typedef long long llong;
const int MAXN = 100000 + 10;
const int MAXT = 1000000 + 10;

int n, q;
struct Fenwick
{
    int tree[MAXT];
    void update(int pos, int val)
    {
        for (int idx = pos ; idx < MAXT ; idx += idx & (-idx))
        {
            tree[idx] += val;
        }
    }

    int query(int t)
    {
        int res = 0;
        for (int idx = t ; idx > 0 ; idx -= idx & (-idx))
        {
            res += tree[idx];
        }

        return res;
    }
};

int a[MAXN];
Fenwick tree;

void add(int idx)
{
    int min = std::min(a[idx], a[idx + 1]);
    int max = std::max(a[idx], a[idx + 1]);
    tree.update(min + 1, 1);
    tree.update(max + 1, -1);
}

void remove(int idx)
{
    int min = std::min(a[idx], a[idx + 1]);
    int max = std::max(a[idx], a[idx + 1]);
    tree.update(min + 1, -1);
    tree.update(max + 1, 1);
}

void solve()
{
    for (int i = 1 ; i < n ; ++i)
    {
        add(i);
    }

    for (int i = 1 ; i <= n ; ++i)
    {
        int qType, pos, val;
        std::cin >> qType;

        if (qType == 1)
        {
            std::cin >> pos >> val;
            
            if (pos < n) remove(pos);
            if (pos > 1) remove(pos - 1);
            
            a[pos] = val;

            if (pos < n) add(pos);
            if (pos > 1) add(pos - 1);
        } else
        {
            std::cin >> val;
            std::cout << tree.query(val) << '\n';
        }
    }
}

void input()
{
    std::cin >> n >> q;
    for (int i = 1 ; i <= n ; ++i)
    {
        std::cin >> a[i];
    }
}

void fastIOI()
{
    std::ios_base :: sync_with_stdio(0);
    std::cout.tie(nullptr);
    std::cin.tie(nullptr);
}

int main()
{
    fastIOI();
    input();
    solve();

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...