Cod sursa(job #325755)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 22 iunie 2009 11:42:37
Problema Marbles Scor 0
Compilator cpp Status done
Runda Summer Camp #1 Marime 1.19 kb
#include<stdio.h>
#define DIM 101
struct marbles
{
	int p,c;
};
marbles a[DIM];
int n,b[70][DIM],maxc;
int cbin (int x,int w)
{
	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 && w!=0)
		{
            if(w==1)
                return dr;
            else if (w==2)
                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,nr;
	x=cbin (x,1);
	y=cbin (y,2);
	for(i=1;i<=maxc;++i)
	{
        nr=b[i][y]-b[i][x];
        if(b[i][x]!=b[i][x-1])
            ++nr;
		if(max<=nr)
		{
			max=nr;
			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,0)].p+=y;
		else
			printf("%d\n",query (x,y));
	}
	return 0;
}