Cod sursa(job #3283381)

Utilizator stefanrotaruRotaru Stefan-Florin stefanrotaru Data 9 martie 2025 13:40:22
Problema Marbles Scor 0
Compilator cpp-64 Status done
Runda oji_go_11_12 Marime 1.28 kb
#include <fstream>
#include <map>

using namespace std;

ifstream f("marbles.in");
ofstream g("marbles.out");

int n, m, x, v, y, aib[65][200005];

map <int, int> culori;

inline int zeros(int i)
{
    return i & -i;
}

inline void update(int culoare, int poz, int val)
{
    for ( ; poz <= 200005; poz += zeros(poz)) {
        aib[culoare][poz] += val;
    }
}

inline int query(int culoare, int poz)
{
    int sum = 0;

    for ( ; poz; poz -= zeros(poz)) {
        sum += aib[culoare][poz];
    }

    return sum;
}

int main()
{
    f >> n >> m;

    for (int i = 1; i <= n; ++i) {
        int a, b;

        f >> a >> b;

        culori[a] = b;

        update(b, a, 1);
    }

    for (int i = 1; i <= m; ++i) {
        f >> v >> x >> y;

        if (v == 0) {
            int culoareVeche = culori[x];

            culori.erase(x);
            culori[x + y] = culoareVeche;

            update(culoareVeche, x, -1);
            update(culoareVeche, x + y, 1);
        }
        else {
            int ans = 0;

            for (int j = 1; j <= 64; ++j) {
                int aux1 = query(j, y) - query(j, x - 1);

                ans = max(ans, aux1);
            }

            g << ans << '\n';
        }
    }

    return 0;
}