Pagini recente » Cod sursa (job #2467239) | Cod sursa (job #13063) | Cod sursa (job #630136) | Cod sursa (job #2367751) | Cod sursa (job #1174969)
#include <cstdio>
#include <algorithm>
using namespace std;
struct qq
{
int x, c;
}v[100005];
int n, m, x, y, op, maxx, c, j, x1, yy, i, p, u, k, a[65][1000002];
bool compp(qq a, qq b)
{
return a.x<b.x;
}
int main()
{
freopen("marbles.in", "r", stdin);
freopen("marbles.out", "w", stdout);
scanf("%d%d", &n, &m);
c=0;
for(i=1;i<=n;i++)
{
scanf("%d%d", &v[i].x, &v[i].c);
if(v[i].c>c) c=v[i].c;
}
sort(v+1,v+n+1,compp);
v[n+1].x=9999999;
for(i=1;i<=n;i++)
for(j=1;j<=c;j++)
if(v[i].c==j) a[j][i]=a[j][i-1]+1;
else a[j][i]=a[j][i-1];
for(i=1;i<=m;i++)
{
scanf("%d%d%d", &op, &x, &y);
if(op==0)
{
p=1;
u=n;
while(p<=u)
{
k=(p+u)/2;
if(v[k].x==x)
break;
else if(v[k].x>k) u=k-1;
else p=k+1;
}
v[k].x+=y;
}
else
{
p=1;
u=n;
while(p<=u)
{
k=(p+u)/2;
if(v[k].x>=x&&v[k-1].x<x)
{
x1=k;
break;
}
else if(v[k].x>=x) u=k-1;
else p=k+1;
}
p=1;
u=n;
while(p<=u)
{
k=(p+u)/2;
if(v[k].x<=y&&v[k+1].x>y)
{
yy=k;
break;
}
else if(v[k].x<=y) p=k+1;
else u=k-1;
}
maxx=0;
for(j=1;j<=c;j++)
if(a[j][yy]-a[j][x1-1]>maxx) maxx=a[j][yy]-a[j][x1-1];
printf("%d\n", maxx);
}
}
return 0;
}