Pagini recente » Cod sursa (job #1434037) | Cod sursa (job #2428080) | Cod sursa (job #2204414) | Cod sursa (job #1644741) | Cod sursa (job #2847598)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("marbles.in");
ofstream fout ("marbles.out");
int n, m;
vector <int> L[66];
short color[100005];
int CB1 (int x , int c)
{
int st = 0, dr = L[c].size() - 1, mij;
while (st <= dr)
{
mij = (st + dr) / 2;
if (L[c][mij] == x)
return mij;
if (L[c][mij] < x)
st = mij + 1;
else dr = mij - 1;
}
return 0;
}
/// cel mai din stanga element mai mare sau egal cu x
int CB2(int x, int c)
{
int st = 0, dr = L[c].size() - 1, mij, p = 0;
if (L[c][0] >= x)
return 0;
while (st <= dr)
{
mij = (st + dr) / 2;
if (L[c][mij] >= x)
{
p = mij;
dr = mij - 1;
}
else st = mij + 1;
}
return p;
}
/// cel mai din dreapta element mai mic sau egal cu x
int CB3(int x, int c)
{
int st = 0, dr = L[c].size() - 1, mij, p = 0;
if (L[c][dr] <= x)
return dr;
while (st <= dr)
{
mij = (st + dr) / 2;
if (L[c][mij] <= x)
{
p = mij;
st = mij + 1;
}
else dr = mij - 1;
}
return p;
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
int x, y;
fin >> x >> y;
L[y].push_back(x);
color[x] = y;
}
for (int i = 1; i <= 64; i++)
if (L[i].size() > 0)
sort (L[i].begin(), L[i].end());
for (int i = 1; i <= m; i++)
{
int q, x , y;
fin >> q >> x >> y;
if (q == 0)
{
int c = color[x];
if (L[c].size() > 0)
{
int poz = CB1(x, c);
L[c][poz] = x + y;
}
}
else
{
int max_val = 0;
for (int i = 1; i <= 64; i++)
if (L[i].size() > 0)
{
int p1 = CB2(x, i);
int p2 = CB3(y, i);
max_val = max(max_val, p2 - p1 + 1);
}
fout << max_val << "\n";
}
}
return 0;
}