Cod sursa(job #3276994)

Utilizator mateilucaLuca Matei Gabriel mateiluca Data 15 februarie 2025 11:06:09
Problema Marbles Scor 100
Compilator cpp-64 Status done
Runda vs11_12_vine_oji_2025 Marime 1.81 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("marbles.in");
ofstream fout("marbles.out");
int n, m;
vector<int> v[64];
int Caut_Bin(int d, int x)
{
    int st, dr, mij;
    st = 0;dr = v[d].size() - 1;
    while(st <= dr)
    {
        mij = (st + dr) / 2;
        if(v[d][mij] == x)
            return mij;
        if(v[d][mij] < x) st = mij + 1;
        else dr = mij - 1;
    }
    return -1;
}
int Caut_Bin_1(int d, int x)
{
    int st, dr, mij, p = 1000000;
    st = 0;
    dr = v[d].size() - 1;
    while(st <= dr)
    {
        mij = (st + dr) / 2;
        if(v[d][mij] >= x) p = mij, dr = mij - 1;
        else st = mij + 1;
    }
    return p;
}
int Caut_Bin_2(int d, int x)
{
    int st, dr, mij, p = -1;
    st = 0;
    dr = v[d].size() - 1;
    while(st <= dr)
    {
        mij = (st + dr) / 2;
        if(v[d][mij] <= x) p = mij, st = mij + 1;
        else dr = mij - 1;
    }
    return p;
}

int main()
{
    int i, j, poz, c, op, x, y, maxi, p1, p2;
    bool gasit;
    fin >> n >> m;
    for(i = 1;i <= n;i++)
    {
        fin >> poz >> c;
        c--;
        v[c].push_back(poz);
    }
    for(i = 0;i < 64;i++)
        sort(v[i].begin(), v[i].end());
    for(i = 1;i <= m;i++)
    {
        fin >> op >> x >> y;
        if(op == 0)
        {
            for(j = 0;j < 64;j++)
            {
                poz = Caut_Bin(j, x);
                if(poz != -1)
                    v[j][poz] = x + y;
            }
        }
        else{
            maxi = 0;
            for(j = 0;j < 64;j++)
            {
                p1 = Caut_Bin_1(j, x);
                p2 = Caut_Bin_2(j, y);
                maxi = max(maxi, p2 - p1 + 1);
            }
            fout << maxi << "\n";
        }
    }
    fout.close();
    return 0;
}