Cod sursa(job #479533)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 24 august 2010 13:45:34
Problema Marbles Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>

#include <algorithm>

using namespace std;

struct bila
{
	int x, y;
} v[100002];

int n, m, sp[100002][66];

inline int max (int a, int b) {return a > b ? a : b;}

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

int cautare (int x)
{
	int st = 1, dr = n, m, sol = 0;
	
	while (st <= dr)
	{
		m = (st + dr) >> 1;
		if (v[m].x <= x)
		{
			sol = m;
			st = m + 1;
		}
		else
			dr = m - 1;
	}
	
	return sol;
}

int main ()
{
	freopen ("marbles.in", "r", stdin);
	freopen ("marbles.out", "w", stdout);
	
	scanf ("%d %d", &n, &m);
	
	int i, j, t, x, y, sol;
	
	for (i = 1; i <= n; i ++)
		scanf ("%d %d", &v[i].x, &v[i].y);
	
	sort (v + 1, v + n + 1, cmp);
	for (i = 1; i <= n; i ++)
	{
		sp[i][v[i].y] = 1;
		for (j = 1; j <= 64; j ++)
			sp[i][j] += sp[i - 1][j];
	}
	
	for (i = 1; i <= m; i ++)
	{
		scanf ("%d %d %d", &t, &x, &y);
		
		if (t == 0)
			v[cautare (x)].x += y;
		else
		{
			sol = 0;
			
			x = cautare (x - 1);
			y = cautare (y) + 1;
			for (j = 1; j <= 64; j ++)
				sol = max (sol, sp[y][j] - sp[x][j]);
			
			printf ("%d\n", sol);
		}
	}
	
	return 0;
}