Pagini recente » Cod sursa (job #2377773) | Cod sursa (job #2894203) | Cod sursa (job #529123) | Cod sursa (job #394988) | Cod sursa (job #2517501)
#include<fstream>
#include<algorithm>
#define x first
#define y second
using namespace std;
ifstream fin("marbles.in");
ofstream fout("marbles.out");
int n,m,mid,k,op,maxim,maxim2,st2,dr2,st1,dr1;
int D[70][100010];
pair<int,int> p[100010];
int main(){
fin>>n>>m;
for(int i=1;i<=n;i++){
fin>>p[i].x>>p[i].y;
if (p[i].y>maxim)
maxim=p[i].y;
}
sort(p+1,p+n+1);
for(int i=1;i<=n;i++){
for(int j=1;j<=maxim;j++)
if(j==p[i].y)
D[j][i]=D[j][i-1]+1;
else
D[j][i]=D[j][i-1];
}
for(int T=1;T<=m;T++){
int X,Y;
fin>>op>>X>>Y;
if(op==0){
st1=1;
dr1=n;
while(st1<=dr1){
mid=st1+(dr1-st1)/2;
if(p[mid].x==X){
break;
}
if(p[mid].x<X){
st1=mid+1;
}
else{
dr1=mid-1;
}
}
if(st1<=dr1){
p[mid].x+=Y;
}
}
else{
st1=1;
dr1=n;
while(st1<=dr1){
mid=st1+(dr1-st1)/2;
if(p[mid].x<X){
st1=mid+1;
}
else{
dr1=mid-1;
}
}
st2=st1;
st1=1;
dr1=n;
while(st1<=dr1){
mid=st1+(dr1-st1)/2;
if(p[mid].x>Y){
dr1=mid-1;
}
else{
st1=mid+1;
}
}
dr2=dr1;
maxim2=0;
for(int i=1;i<=maxim;i++){
if(D[i][dr2]-D[i][st2-1]>maxim2){
maxim2=D[i][dr2]-D[i][st2-1];
}
}
fout<<maxim2<<"\n";
}
}
return 0;
}