Pagini recente » Cod sursa (job #953494) | Cod sursa (job #1099280) | Cod sursa (job #2901126) | Cod sursa (job #1450906) | Cod sursa (job #449213)
Cod sursa(job #449213)
#include<stdio.h>
#include<algorithm>
using namespace std;
#define maxim(a,b) (a>b ? a : b)
int sol,n,m,c;
int d[100002][67];
struct pereche
{
int x,y;
};
pereche q[100006];
int cmp(const pereche& a,const pereche& b)
{
return (a.x<b.x);
}
int main ()
{
int i,j,st,dr,mij,a;
int sol1,sol2,b,tip;
freopen("marbles.in","r",stdin);
freopen("marbles.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d%d",&a,&b);
c=maxim(c,b);
q[i].x=a;
q[i].y=b;
}
sort(q+1,q+n+1,cmp);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(q[i].y==j)
d[i][j]=d[i-1][j]+1;
else
d[i][j]=d[i-1][j];
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&tip,&a,&b);
if(!tip)
{
st=1;dr=n;
while(st<=dr)
{
mij=(st+dr)/2;
if(q[mij].x<a)
st=mij+1;
else
if(q[mij].x>a)
dr=mij-1;
else
break;
}
if(st<=dr)
q[mij].x+=b;
continue;
}
st=1;dr=n;
a--;
sol1=0;
while(st<=dr)
{
mij=(st+dr)/2;
if(q[mij].x<=a)
{
st=mij+1;
sol1=mij;
}
else
dr=mij-1;
}
sol2=0;
st=1;dr=n;
while(st<=dr)
{
mij=(st+dr)/2;
if(q[mij].x<=b)
{
st=mij+1;
sol2=mij;
}
else
dr=mij-1;
}
sol=0;
for(j=1;j<=c;j++)
sol=maxim(sol,d[sol2][j]-d[sol1][j]);
printf("%d\n",sol);
}
return 0;
}