Cod sursa(job #470621)

Utilizator mihai995mihai995 mihai995 Data 14 iulie 2010 21:28:14
Problema Marbles Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
using namespace std;

struct bila{int x;short int c;} v[1<<17];
int a[1<<17][65],n,m;

ifstream in("marbles.in");
ofstream out("marbles.out");

int bs(int x,bool tip)
{
	int i,step=1<<16;
	for (i=0;step;step>>=1)
		if (i+step<=n && v[i+step].x<x+tip)
			i+=step;
	return i;
}

bool cmp(bila a,bila b)
{
	return a.x<b.x;
}

int main()
{
	int i,j,x,y,q;
	in>>n>>m;
	for (i=1;i<=n;i++)
		in>>v[i].x>>v[i].c;
	sort(v+1,v+n+1,cmp);
	for (i=1;i<=n;i++)
	{
		for (j=1;j<=64;j++)
			a[i][j]=a[i-1][j];
		a[i][v[i].c]++;
	}
	for (i=1;i<=m;i++)
	{
		in>>q>>x>>y;
		if (!q)
		{
			v[bs(x,1)].x+=y;
			continue;
		}
		x=bs(x,0);y=bs(y,1);
		q=a[y][1]-a[x][1];
		for (j=2;j<=64;j++)
			if (q<a[y][j]-a[x][j])
				q=a[y][j]-a[x][j];
		out<<q<<"\n";
	}
	return 0;
}