Cod sursa(job #2847601)

Utilizator robertanechita1Roberta Nechita robertanechita1 Data 11 februarie 2022 08:55:18
Problema Marbles Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.91 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("marbles.in");
ofstream fout("marbles.out");

vector<int>L[70];
int n, m, poz[100005];

/**

1 : 1 4 11
2 : 5
3 : 15

*/

int Cb1(int i, int x)
{
    int st, dr, mij;
    st = 0; dr = L[i].size() - 1;
    while(st <= dr)
    {
        mij = (st + dr)/2;
        if(L[i][mij] == x)
            return mij;
        if(L[i][mij] < x)
            st = mij + 1;
        else
            dr = mij - 1;
    }
}

int CbX(int x, int i)
{
    int st, dr, mij, pz;
    st = 0; dr = L[i].size();
    while(st <= dr)
    {
        mij = (st + dr)/2;
        if(L[i][mij] < x)
            st = mij + 1;
        else if(L[i][mij] >= x)
        {
            dr = mij - 1;
            pz = mij;
        }
    }
    return pz;
}

int CbY(int x, int i)
{
    int st, dr, mij, pz;
    st = 0; dr = L[i].size();
    while(st <= dr)
    {
        mij = (st + dr)/2;
        if(L[i][mij] < x)
        {
            pz = mij;
            st = mij + 1;
        }
        else if(L[i][mij] >= x)
            dr = mij - 1;
    }
    return pz;
}

int main()
{
    int x, y, p;
    fin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        fin >> x >> y;
        L[y].push_back(x);
        poz[x] = y;
    }
    for(int i = 1; i <= 64; i++)
        if(L[i].size())
            sort(L[i].begin(), L[i].end());
    for(int i = 1; i <= m; i++)
    {
        fin >> p >> x >> y;
        if(p == 0)
        {
            int pozX = Cb1(poz[x], x);
            L[poz[x]][pozX] = x + y;
        }
        else
        {
            int sol = 0;
            for(int j = 0; j <= 64; j++)
                if(L[j].size())
            {
                x = CbX(x, j);
                y = CbY(y, j);
                sol = max(sol, y - x + 1);
            }
            fout << sol << "\n";
        }
    }
    return 0;
}