Cod sursa(job #1006107)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 6 octombrie 2013 13:30:11
Problema Marbles Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,C[65],nrc,sum[65][100100],X[100100],sol;
struct Bila{
	int x,color;
	bool operator <(const Bila &A) const
	{
		return x<A.x;
	}
};
Bila v[100100];
bool viz[65];

int main()
{
	int i,j,c,op,poz,st,dr;
	freopen("marbles.in","r",stdin);
	freopen("marbles.out","w",stdout);
	scanf("%d %d",&n,&m);
	for(i=1;i<=n;i++)
	{
		scanf("%d %d",&v[i].x,&v[i].color);
		viz[v[i].color]=true;
	}
	for(c=1;c<=64;c++)
		if(viz[c])
			C[++nrc]=c;
	sort(v+1,v+n+1);
	for(i=1;i<=n;i++)
	{
		for(c=1;c<=nrc;c++)
			sum[C[c]][i]=sum[C[c]][i-1];
		sum[v[i].color][i]++;
		X[i]=v[i].x;
	}
	while(m--)
	{
		scanf("%d %d %d",&op,&i,&j);
		if(op==0)
		{
			poz=lower_bound(X+1,X+n+1,i)-X;
			X[poz]+=j;
		}
		else
		{
			st=lower_bound(X+1,X+n+1,i)-X;
			dr=upper_bound(X+st,X+n+1,j)-X-1;
			sol=0;
			for(c=1;c<=nrc;c++)
				sol=max(sol,sum[C[c]][dr]-sum[C[c]][st-1]);
			printf("%d\n",sol);
		}
	}
	return 0;
}