Pagini recente » Cod sursa (job #3313302) | Cod sursa (job #506701) | Cod sursa (job #1711544) | Cod sursa (job #1669600) | Cod sursa (job #3341052)
#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;
}