Pagini recente » Cod sursa (job #3003560) | Cod sursa (job #3147834) | Cod sursa (job #1384642) | Cod sursa (job #605381) | Cod sursa (job #167807)
Cod sursa(job #167807)
#include<cstdio>
#include<vector>
#include<algorithm>
int n,m,t,i,j,l,s[100001][65],max;
std::pair<int,int> a[100002];
int search(int st,int dr,int i,int u=0)
{
if(st==dr)
if(u==0)
if(a[st].first<i) return st+1;
else return st;
else
if(a[st].first>i) return st-1;
else return st;
if(st>dr)
if(u==0)
if(a[dr].first>=i) return dr;
else
if(a[st].first>=i) return st;
else return st+1;
else
if(a[st].first<=i) return st;
else
if(a[dr].first<=i) return dr;
else return dr-1;
int mij=(st+dr)>>1;
if(a[mij].first==i) return mij;
if(a[mij].first>i) return search(st,mij-1,i,u);
else return search(mij+1,dr,i,u);
}
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",&a[i].first,&a[i].second);
std::sort(&a[1],&a[n+1]);
for(i=1;i<=n;i++){
for(j=1;j<=64;j++)
s[i][j]=s[i-1][j];
s[i][a[i].second]++;}
for(;m;m--){
scanf("%d %d %d",&t,&i,&j);
if(t==0)
a[search(1,n,i)].first+=j;
else{
i=search(1,n,i,0)-1;
j=search(1,n,j,1);
max=0;
for(l=1;l<=64;l++)
if(s[j][l]-s[i][l]>max) max=s[j][l]-s[i][l];
printf("%d\n",max);}}
fclose(stdout);
return 0;
}