Pagini recente » Cod sursa (job #3143556) | Cod sursa (job #304485) | Cod sursa (job #939946) | Cod sursa (job #1689937) | Cod sursa (job #1174987)
#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][100002];
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=999999999;
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;
x1=0;
yy=0;
while(p<=u)
{
k=(p+u)/2;
if(v[k].x>=x)
{
x1=k;
u=k-1;
}
else p=k+1;
}
if(x1==0)
{
printf("0\n");
continue;
}
p=1;
u=n;
while(p<=u)
{
k=(p+u)/2;
if(v[k].x<=y)
{
yy=k;
p=k+1;
}
else u=k-1;
}
if(yy==0)
{
printf("0\n");
continue;
}
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;
}