Cod sursa(job #3277025)

Utilizator AbRobertAbabei Robert-Petronel AbRobert Data 15 februarie 2025 11:24:02
Problema Marbles Scor 0
Compilator cpp-64 Status done
Runda vs11_12_vine_oji_2025 Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
using namespace std;

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

vector<int> a[65];
int n, m;
// v[x] retine culoarea bilei aflate la pozitia x
unordered_map<int, int> v;

int CB(int x, int y)
{
	// returneaza pozitia in care se afla x
	int st, dr, mij = 0, p;
	st = 0; dr = a[y].size() - 1; p = dr + 1;
	while (st <= dr)
	{
		mij = (st + dr) / 2;
		if (a[y][mij] < x)
			st = mij + 1;
		else if (a[y][mij] > x)
		{
			dr = mij - 1;
			p = mij;
		}
		else return mij;
	}
	return p;
}

int CB(int x, int y, int c)
{
	// returneaza numarul de bile aflate in [x, y]
	int st = CB(x, c), dr = CB(y, c);
	if (x == y)
		return a[c][CB(x, c)] == x;
	return dr - st;
}

int main()
{
	int i, x, y, op, maxim;
	fin >> n >> m;
	for (i = 1; i <= n; i++)
	{
		fin >> x >> y;
		v[x] = y;
		a[y].push_back(x);
	}
	for (i = 1; i <= m; i++)
	{
		fin >> op >> x >> y;
		if (op == 0)
		{
			a[v[x]][CB(x, v[x])] += y;
			v[x + y] = v[x];
			v[x] = 0;
		}
		else
		{
			maxim = 0;
			for (int j = 1; j <= 64; j++)
			{
				maxim = max(maxim, CB(x, y, j));
			}
			fout << maxim << "\n";
		}
	}
}