Pagini recente » Cod sursa (job #543667) | Cod sursa (job #992729) | Istoria paginii runda/budescu/clasament | Cod sursa (job #3232314) | Cod sursa (job #1510539)
#include <cstdio>
#include <algorithm>
#define nmax 100005
#define cmax 65
using namespace std;
struct nod{
int l,c[cmax];
} v[nmax];
int n,m;
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;
}
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",&v[i].l,&k);
for (j=1;j<cmax;j++)
v[i].c[j]=v[i-1].c[j];
v[i].c[k]++;
}
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;
j=binarylow(j);
k=binaryhigh(k);
for (t=1;t<cmax;t++)
sol=max(sol,v[k].c[t]-v[j-1].c[t]);
printf("%d\n",sol);
}
}
return 0;
}