Pagini recente » Cod sursa (job #1148435) | Cod sursa (job #1534430) | Monitorul de evaluare | Cod sursa (job #1525331) | Cod sursa (job #165345)
Cod sursa(job #165345)
#include <stdio.h>
#include <stdlib.h>
#define nMax 100005
#define tMax 65
long n,m,i,j,p[nMax],tip[nMax],ind[nMax];
long p1,p2,t,a,b,s[nMax][tMax],max;
int comp(const void * n1, const void * n2){
return p[*((long*)n1)]-p[*((long*)n2)];
}
long bsearch(long v){
long low=1,high=n,mid;
while(low<=mid){
mid=(low+high)/2;
if (p[ind[mid]]>v)
high=mid-1;
else if (p[ind[mid]]<v)
low=mid+1;
else return mid;
}
return low;
}
long endsearch(long v){
long low=1,mid,high=n+1;
while (low<high){
mid=(low+high)/2;
if (p[ind[mid]]<v)
low=mid+1;
else
high=mid;
}
return low;
}
int main(){
freopen("marbles.in","r",stdin);
freopen("marbles.out","w",stdout);
scanf("%ld %ld",&n,&m);
for (i=1;i<=n;i++){
scanf("%ld %ld",&p[i],&tip[i]);
ind[i]=i;
}
qsort(ind+1,n,sizeof(long),comp);
for (i=1;i<=n;i++){
for (j=1;j<=64;j++)
s[i][j]=s[i-1][j];
s[i][tip[ind[i]]]++;
}
for (j=1;j<=64;j++)
s[n+1][j]=s[n][j];
for (i=1;i<=m;i++){
scanf("%ld %ld %ld",&t,&a,&b);
if (t==0)
p[ind[bsearch(a)]]+=b;
else{
p1=endsearch(a);
p2=endsearch(b);
if (p[ind[p2]]!=b)p2--;
max=0;
for (j=1;j<=64;j++)
if (s[p2][j]-s[p1-1][j]>max)max=s[p2][j]-s[p1-1][j];
printf("%ld\n",max);
}
}
return 0;
}