Cod sursa(job #3341052)

Utilizator mariusharabariMarius Harabari mariusharabari Data 17 februarie 2026 18:53:20
Problema Marbles Scor 100
Compilator cpp-64 Status done
Runda hlo_bucuresti_2526_1112_maraton Marime 1.46 kb
#include <bits/stdc++.h>
using namespace std;

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

const int NMAX=1e5+1;
int n, m, x[65][NMAX], nr[65];
vector <pair <int, int>> v;

int cautare(int l, int r, int val, int c){
    int rez=0;
    while(l<=r){
        int m=(l+r)/2;
        if(x[c][m]<=val){
            rez=max(rez, m);
            l=m+1;
        }
        else{
            r=m-1;
        }
    }
    return rez;
}

int main(){
    fin>>n>>m;
    int a, c;
    for(int i=1;i<=n;i++){
        fin>>a>>c;
        v.push_back({a, c});
    }
    sort(v.begin(), v.end());
    for(int i=0;i<n;i++){
        a=v[i].first;
        c=v[i].second;
        x[c][++nr[c]]=a;
    }

    int op, i, j;
    while(m--){
        fin>>op>>i>>j;
        if(op==0){
            int rez=0, crez=0;
            for(int c=1;c<65;c++){
                int poz=cautare(1, nr[c], i, c);
                if(x[c][poz]==i){
                    rez=poz;
                    crez=c;
                    break;
                }
            }
            x[crez][rez]+=j;
        }
        else{
            int rez=0;
            for(int c=1;c<65;c++){
                int l=cautare(1, nr[c], i-1, c);
                int r=cautare(1, nr[c], j, c);
                //cout<<c<<' '<<l<<' '<<r<<endl;
                rez=max(rez, r-l);
            }
            //cout<<rez<<endl;
            fout<<rez<<'\n';
        }
    }
    return 0;
}