Pagini recente » Cod sursa (job #321616) | Cod sursa (job #2665755) | Cod sursa (job #1105001) | Cod sursa (job #2327661) | Cod sursa (job #445019)
Cod sursa(job #445019)
#include<stdio.h>
#include<algorithm>
#define Nmax 100010
using namespace std;
int i,j,n,m,op,a,b,S[70][Nmax];
struct bila { int poz,cul;} v[Nmax];
int cmp(bila a, bila b)
{
return a.poz<b.poz;
}
void update (int p,int add)
{
int s=1,d=n,m;
for(m=(s+d)>>1; s<=d; m=(s+d)>>1)
{
if(v[m].poz==p) {v[m].poz+=add; return ;}
if(v[m].poz<p) s=m+1;
else d=m-1;
}
}
int query (int a, int b)
{
int s=1,d=n,m,i=0,Max=0;
for(m=(s+d)>>1; s<=d; m=(s+d)>>1)
if(v[m].poz>=a) {i=m; d=m-1;}
else s=m+1;
if(!i) return 0;
a=i-1; i=0; s=1; d=n;
for(m=(s+d)>>1; s<=d; m=(s+d)>>1)
if(v[m].poz<=b) {i=m; s=m+1;}
else d=m-1;
if(!i) return 0;
b=i;
for(i=1;i<=64;i++)
if(S[i][b]-S[i][a]>Max) Max=S[i][b]-S[i][a];
return Max;
}
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",&v[i].poz,&v[i].cul);
sort(v+1,v+n+1,cmp);
for(i=1;i<=n;i++)
{
S[v[i].cul][i]=1;
for(j=1;j<=64;j++)
S[j][i]+=S[j][i-1];
}
for(i=1;i<=m;i++)
{
scanf("%d %d %d",&op,&a,&b);
if(!op) update(a,b);
else printf("%d\n",query(a,b));
}
return 0;
}