Pagini recente » Cod sursa (job #2486900) | Cod sursa (job #2042527) | Cod sursa (job #1775934) | Cod sursa (job #2225427) | Cod sursa (job #2847601)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("marbles.in");
ofstream fout("marbles.out");
vector<int>L[70];
int n, m, poz[100005];
/**
1 : 1 4 11
2 : 5
3 : 15
*/
int Cb1(int i, int x)
{
int st, dr, mij;
st = 0; dr = L[i].size() - 1;
while(st <= dr)
{
mij = (st + dr)/2;
if(L[i][mij] == x)
return mij;
if(L[i][mij] < x)
st = mij + 1;
else
dr = mij - 1;
}
}
int CbX(int x, int i)
{
int st, dr, mij, pz;
st = 0; dr = L[i].size();
while(st <= dr)
{
mij = (st + dr)/2;
if(L[i][mij] < x)
st = mij + 1;
else if(L[i][mij] >= x)
{
dr = mij - 1;
pz = mij;
}
}
return pz;
}
int CbY(int x, int i)
{
int st, dr, mij, pz;
st = 0; dr = L[i].size();
while(st <= dr)
{
mij = (st + dr)/2;
if(L[i][mij] < x)
{
pz = mij;
st = mij + 1;
}
else if(L[i][mij] >= x)
dr = mij - 1;
}
return pz;
}
int main()
{
int x, y, p;
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
fin >> x >> y;
L[y].push_back(x);
poz[x] = y;
}
for(int i = 1; i <= 64; i++)
if(L[i].size())
sort(L[i].begin(), L[i].end());
for(int i = 1; i <= m; i++)
{
fin >> p >> x >> y;
if(p == 0)
{
int pozX = Cb1(poz[x], x);
L[poz[x]][pozX] = x + y;
}
else
{
int sol = 0;
for(int j = 0; j <= 64; j++)
if(L[j].size())
{
x = CbX(x, j);
y = CbY(y, j);
sol = max(sol, y - x + 1);
}
fout << sol << "\n";
}
}
return 0;
}