Pagini recente » Cod sursa (job #2240122) | Cod sursa (job #1834461) | Cod sursa (job #2168782) | Cod sursa (job #32420) | Cod sursa (job #445014)
Cod sursa(job #445014)
#include<stdio.h>
#include<algorithm>
#define Nmax 100010
using namespace std;
int i,j,n,m,op,a,b,c;
struct sir { int poz,cul[70];} v[Nmax];
int cmp (sir a, sir 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(v[b].cul[i]-v[a].cul[i]>Max) Max=v[b].cul[i]-v[a].cul[i];
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,&c);
v[i].cul[c]=1;
}
sort(v+1,v+n+1,cmp);
for(i=2;i<=n;i++)
for(j=1;j<=64;j++)
v[i].cul[j]+=v[i-1].cul[j];
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;
}