Cod sursa(job #2294018)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 1 decembrie 2018 20:04:09
Problema Marbles Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>
#define N_MAX 100003
using namespace std;
int m, i, j, x, y, tip, st, dr, ans;
ifstream fin("marbles.in");
ofstream fout("marbles.out");
int sp [N_MAX][66],n;
pair <int,int> v [N_MAX];
int bns (int x, int f) {
	int st = 1, dr = n;
	while (st <= dr) {
		int mij = (st + dr) / 2;
		if (v [mij].first > x || (v [mij].first == x && f == 0))
			dr = mij - 1;
		else st = mij + 1;
	}
	if (f == 0) return st;
	else return dr;
}
int main (){
	fin >> n >> m;
	for (int i = 1; i <= n; i ++)
        fin >> v [i].first >> v [i].second;
	sort (v + 1, v + n + 1);
	for (i = 1; i <= n; i ++){
		sp [i][v [i].second] ++;
		for (j = 1; j <= 64; j ++)
            sp [i][j] += sp [i - 1][j];
	}
	for (int l = 0; l < m; l ++) {
		fin >> tip >> x >> y;
		st = bns (x, 0);
		if (tip == 0)
			v [st].first += y;
		else{
			dr = bns (y, 1);
			for (i = 1, ans = 0; i <= 64; i ++)ans = max (ans, sp [dr][i] - sp [st - 1][i]);
			fout << ans << '\n';
		}
	}
	return 0;
}