Pagini recente » Cod sursa (job #2380974) | Cod sursa (job #2519868) | Cod sursa (job #2832207) | Cod sursa (job #1035563) | Cod sursa (job #1510549)
#include <cstdio>
#include <algorithm>
#define nmax 100005
#define cmax 65
using namespace std;
struct nod{
int l,c[cmax];
} v[nmax];
int n,m;
struct nod2{
int x;int y;
} a[nmax];
int binarylow(int k)
{
int sol=0;
for (int bit=1<<16;bit;bit>>=1)
if (sol+bit<=n&&v[sol+bit].l<k)
sol+=bit;
return sol+1;
}
int binaryhigh(int k)
{
int sol=0;
for (int bit=1<<16;bit;bit>>=1)
if (sol+bit<=n&&v[sol+bit].l<=k)
sol+=bit;
return sol;
}
bool cmp(const nod2 &a,const nod2 &b)
{
return a.x<b.x;
}
int main()
{
freopen("marbles.in","r",stdin);
freopen("marbles.out","w",stdout);
scanf("%d %d",&n,&m);
int i,j,k,t,sol,op;
for (i=1;i<=n;i++)
scanf("%d %d",&a[i].x,&a[i].y);
sort(a+1,a+n+1,cmp);
for (i=1;i<=n;i++) {
v[i].l=a[i].x;
for (j=1;j<cmax;j++)
v[i].c[j]=v[i-1].c[j];
v[i].c[a[i].y]++;
}
for (i=1;i<=m;i++) {
scanf("%d %d %d",&op,&j,&k);
if (op==0) {
j=binaryhigh(j);
v[j].l+=k;
}
else {
sol=0;
if (j>k) {
printf("0\n");
continue;
}
j=binarylow(j);
k=binaryhigh(k);
if (j>k) {
printf("0\n");
continue;
}
for (t=1;t<cmax;t++)
sol=max(sol,v[k].c[t]-v[j-1].c[t]);
printf("%d\n",sol);
}
}
return 0;
}