Cod sursa(job #497241)

Utilizator swift90Ionut Bogdanescu swift90 Data 1 noiembrie 2010 21:39:22
Problema Marbles Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<stdio.h>
#include<utility>
#include<algorithm>
using namespace std;
int nr[66][100100],poz[100100],N,M;
int muta(int x){
	int p=1,u=N,mij;
	while(p<u){
		mij=p+(u-p)/2;
		if(x<=poz[mij])
			u=mij;
		else
			p=mij+1;
	}
	return p;
}
int main(){
	freopen("marbles.in","r",stdin);
	freopen("marbles.out","w",stdout);
	int i,a,b,x,y;
	scanf("%d%d",&N,&M);
	for(i=1;i<=N;++i){
		scanf("%d%d",&a,&b);
		nr[b][i]=1;
		poz[i]=a;
	}
	sort(poz+1,poz+N+1);
	for(i=1;i<=64;++i){
		for(a=2;a<=poz[N];++a)
			nr[i][a]+=nr[i][a-1];
	}
	for(i=0;i<M;++i){
		scanf("%d",&a);
		if(!a){
			scanf("%d%d",&a,&b);
			poz[muta(a)]+=b;
		}
		else{
			scanf("%d%d",&a,&b);
			x=(lower_bound(poz+1,poz+N+1,a)-poz);
			y=(upper_bound(poz+1,poz+N+1,b)-poz);
			if(poz[x]!=a)
				++x;
			if(poz[y]!=b)
				--y;
			b=-10;
			for(a=1;a<=64;++a){
				if(nr[a][y]-nr[a][x]+1>b)
					b=nr[a][y]-nr[a][x]+1;
			}
			printf("%d\n",b);
		}
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}