Pagini recente » Cod sursa (job #2569660) | Cod sursa (job #956296) | Cod sursa (job #3156260) | Cod sursa (job #1782195) | Cod sursa (job #3276994)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("marbles.in");
ofstream fout("marbles.out");
int n, m;
vector<int> v[64];
int Caut_Bin(int d, int x)
{
int st, dr, mij;
st = 0;dr = v[d].size() - 1;
while(st <= dr)
{
mij = (st + dr) / 2;
if(v[d][mij] == x)
return mij;
if(v[d][mij] < x) st = mij + 1;
else dr = mij - 1;
}
return -1;
}
int Caut_Bin_1(int d, int x)
{
int st, dr, mij, p = 1000000;
st = 0;
dr = v[d].size() - 1;
while(st <= dr)
{
mij = (st + dr) / 2;
if(v[d][mij] >= x) p = mij, dr = mij - 1;
else st = mij + 1;
}
return p;
}
int Caut_Bin_2(int d, int x)
{
int st, dr, mij, p = -1;
st = 0;
dr = v[d].size() - 1;
while(st <= dr)
{
mij = (st + dr) / 2;
if(v[d][mij] <= x) p = mij, st = mij + 1;
else dr = mij - 1;
}
return p;
}
int main()
{
int i, j, poz, c, op, x, y, maxi, p1, p2;
bool gasit;
fin >> n >> m;
for(i = 1;i <= n;i++)
{
fin >> poz >> c;
c--;
v[c].push_back(poz);
}
for(i = 0;i < 64;i++)
sort(v[i].begin(), v[i].end());
for(i = 1;i <= m;i++)
{
fin >> op >> x >> y;
if(op == 0)
{
for(j = 0;j < 64;j++)
{
poz = Caut_Bin(j, x);
if(poz != -1)
v[j][poz] = x + y;
}
}
else{
maxi = 0;
for(j = 0;j < 64;j++)
{
p1 = Caut_Bin_1(j, x);
p2 = Caut_Bin_2(j, y);
maxi = max(maxi, p2 - p1 + 1);
}
fout << maxi << "\n";
}
}
fout.close();
return 0;
}