Pagini recente » Cod sursa (job #2560744) | Cod sursa (job #162499) | Cod sursa (job #37032) | Cod sursa (job #1489422) | Cod sursa (job #3277025)
#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";
}
}
}