Pagini recente » Cod sursa (job #318109) | Cod sursa (job #945194) | Cod sursa (job #2910900) | Cod sursa (job #62901) | Cod sursa (job #168823)
Cod sursa(job #168823)
#include <stdio.h>
#include <assert.h>
#include <algorithm>
#include <vector>
using namespace std;
#define f first
#define s second
#define mp make_pair
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define nmax 100111
#define pt(i) (1<<(i))
int n,m,A[nmax][64],sol;
pair <int,int> P[nmax];
int find(int x)
{
int j=0,i;
for(i=16;i>=0;--i)
if(j+pt(i)<n && P[j+pt(i)].f<=x)
j+=pt(i);
return j;
}
int main()
{
int ii,i,j,c,t;
freopen("marbles.in","r",stdin);
freopen("marbles.out","w",stdout);
scanf("%d %d",&n,&m);
assert(1<=n && n <=100000);
assert(1<=n && m <=100000);
FOR(i,0,n)
{
scanf("%d %d",&P[i].f,&P[i].s);
assert(1<= P[i].s && P[i].s<=64);
P[i].s--;
}
P[n]=mp(0,64); n++;
sort(P,P+n);
P[n]=mp(100000,64); n++;
FOR(i,1,n-1)
{
memcpy(A[i],A[i-1],sizeof(A[i]));
A[i][P[i].s]++;
}
FOR(ii,0,m)
{
scanf("%d %d %d",&c,&i,&j);
if(c)
{
i=find(i-1); j=find(j); sol=0;
FOR(t,0,64)
if(sol<A[j][t]-A[i][t])
sol=A[j][t]-A[i][t];
printf("%d\n",sol);
continue;
}
P[find(i)].f += j;
}
return 0;
}