Pagini recente » Cod sursa (job #898040) | Rating Calin David (Hahaharock) | Cod sursa (job #702392) | Cod sursa (job #2246051) | Cod sursa (job #1412979)
#include <cstdio>
#define f first
#define s second
#define N 100005
#include <algorithm>
using namespace std;
int i,j,b[N][65],m,n,typ,x,xx,y,Max;
pair<int,int> a[N];
int DetPoz(int x)
{
int p=1,u=n,mj;
while(p<=u)
{
mj=(int)(1LL*(1LL*p+1LL*u)/2);
if(a[mj].f==x) return mj;
if(a[mj].f<x) p=mj+1;
else u=mj-1;
}
return p;
}
int DetPoz2(int x)
{
int k=DetPoz(x);
if(a[k].f==x) return k;
return k-1;
}
int main()
{
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[i].f,&a[i].s);
sort(a+1,a+n+1);
for(i=1;i<=n;++i)
for(j=0;j<64;++j)
{
b[i][j]=b[i-1][j];
if(a[i].s==j+1) ++b[i][j];
}
for(;m;--m)
{
scanf("%d%d%d",&typ,&x,&y);
if(typ==1 && x>y)
{
printf("0\n");
continue;
}
x=DetPoz(x);
if(typ==1)
{
Max=0;y=DetPoz2(y);
if(x>y)
{
printf("0\n");
continue;
}
for(i=0;i<64;++i)
{
xx=b[y][i]-b[x-1][i];
if(Max<xx) Max=xx;
}
printf("%d\n",Max);
}
else a[x].f+=y;
}
return 0;
}