Cod sursa(job #325753)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 22 iunie 2009 11:05:10
Problema Marbles Scor 0
Compilator cpp Status done
Runda Summer Camp #1 Marime 1.01 kb
#include<stdio.h>
#define DIM 100001
struct marbles
{
	int p,c;
};
marbles a[DIM];
int n,b[70][DIM],maxc;
int cbin (int x)
{
	int st,dr,mij;
	for(st=1,dr=n;st!=dr;)
	{
		mij=(st+dr)/2;
		if(a[st].p<x && x<a[dr].p && dr-st==1)
			return st;
		if(a[mij].p==x)
			return mij;
		if(a[mij].p>x)
			dr=mij-1;
		else if (a[mij].p<x)
				st=mij+1;
	}
	return st;
}
int query (int x,int y)
{
	int max=0,cul,i;
	x=cbin (x);
	y=cbin (y);
	for(i=1;i<=maxc;++i)
		if(max<(b[i][y]-b[i][x]))
		{
			max=b[i][y]-b[i][x];
			cul=i;
		}
	return cul;
}
int main ()
{
	freopen("marbles.in","r",stdin);
	freopen("marbles.out","w",stdout);
	int m,i,q,x,y,j;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i)
	{
		scanf("%d%d",&a[i].p,&a[i].c);
		++b[a[i].c][i];
		if(maxc<a[i].c)
			maxc=a[i].c;
	}
	for(i=1;i<=maxc;++i)
		for(j=2;j<=n;++j)
			b[i][j]+=b[i][j-1];
	for(i=1;i<=m;++i)
	{
		scanf("%d%d%d",&q,&x,&y);
		if(q==0)
			a[cbin(x)].p+=y;
		else
			printf("%d\n",query (x,y));
	}
	return 0;
}