Pagini recente » Cod sursa (job #2183606) | Cod sursa (job #2687218) | Cod sursa (job #1904953) | Cod sursa (job #2742280) | Cod sursa (job #2847740)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("marbles.in");
ofstream fout("marbles.out");
vector <int> c[65];
int n, max_colour, len[65];
int CB(int colour, int x)
{
int st = 0, dr = len[colour] - 1, mij;
while (st <= dr)
{
mij = (st + dr) / 2;
if (c[colour][mij] == x) return mij;
if (c[colour][mij] < x) st = mij + 1;
else dr = mij - 1;
}
return -1;
}
void Move(int x, int y)
{
int i, pos = 0;
for (i = 1; i <= max_colour; i++)
{
pos = CB(i, x);
if (pos != -1 && c[i][pos] == x)
{
c[i][pos] = x + y;
return;
}
}
}
int CB_L(int colour, int x)
{
int st, dr, mij, p = -1;
st = 0;
dr = len[colour] - 1;
///cout << st << " " << dr << "\n";
while(st <= dr)
{
//cout << 1;
mij = (st + dr) / 2;
if (c[colour][mij] <= x)
{
st = mij + 1;
p = mij;
}
else dr = mij - 1;
}
return p;
}
int CB_R(int colour, int x)
{
int st, dr, mij, p = -1;
st = 0;
dr = len[colour] - 1;
while (st <= dr)
{
mij = (st + dr) / 2;
if (c[colour][mij] >= x)
{
dr = mij - 1;
p = mij;
}
else st = mij + 1;
}
return p;
}
int Ask(int x, int y)
{
int i, cnt = 0, nr, pos1, pos2;
for (i = 1; i <= max_colour; i++)
{
nr = 0;
pos1 = CB_R(i, x);
pos2 = CB_L(i, y);
if (pos1 == -1 && pos2 == -1) nr = 0;
else if (pos1 == -1 || pos2 == -1) nr = 1;
else nr = pos2 - pos1 + 1;
cnt = max(cnt, nr);
}
return cnt;
}
void Citire()
{
int task, i, m, x, y;
fin >> n >> m;
for (i = 1; i <= n; i++)
{
fin >> x >> y;
c[y].push_back(x);
len[y]++;
max_colour = max(max_colour, y);
}
while (m--)
{
fin >> task >> x >> y;
if (task == 0) Move(x, y);
else fout << Ask(x, y) << "\n";
}
fin.close();
fout.close();
}
int main()
{
Citire();
return 0;
}