Cod sursa(job #497260)

Utilizator swift90Ionut Bogdanescu swift90 Data 1 noiembrie 2010 22:06:41
Problema Marbles Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>
#include<utility>
#include<algorithm>
using namespace std;
struct baza{
	int a,b;
}init[100100];
struct cmp{
	bool operator()(const baza x,const baza y)const{
		if(x.a<y.a)
			return true;
		return false;
	}
};
int nr[66][100100],poz[100100],N,M;
int caut(int x){
	int p=1,u=N,mij;
	while(p<u){
		mij=(p+u)/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",&init[i].a,&init[i].b);
	sort(init+1,init+N+1,cmp());
	for(i=1;i<=N;++i){
		nr[init[i].b][i]=1;
		poz[i]=init[i].a;
	}
	for(i=1;i<=64;++i){
		for(a=2;a<=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[caut(a)]+=b;
		}
		else{
			scanf("%d%d",&a,&b);
			x=caut(a);
			y=caut(b);
			--x;
			b=-10;
			for(a=1;a<=64;++a){
				if(nr[a][y]-nr[a][x]>b)
					b=nr[a][y]-nr[a][x];
			}
			printf("%d\n",b);
		}
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}