Pagini recente » Cod sursa (job #2910423) | Cod sursa (job #414195) | Cod sursa (job #877651) | Cod sursa (job #215716) | Cod sursa (job #475578)
Cod sursa(job #475578)
#include <fstream>
#include <algorithm>
#include <utility>
using namespace std;
int n, m;
pair<int, int> v[100001];
int s[100001][65];
int main()
{
ifstream fin("marbles.in");
ofstream fout("marbles.out");
fin >> n >> m;
for (int i = 1; i <= n; ++i)
fin >> v[i].first >> v[i].second;
sort(v + 1, v + n + 1);
for (int i = 1; i <= n; ++i)
{
++s[i][v[i].second];
for (int j = 1; j <= 64; ++j)
s[i][j] += s[i - 1][j];
}
int aux, p1, p2;
for (int i = 1; i <= m; ++i)
{
fin >> aux >> p1 >> p2;
int step, pos1, pos2;
switch (aux)
{
case 0:
for (step = 1; (step << 1) <= n; step <<= 1);
for (pos1 = 0; step; step >>= 1)
if (pos1 + step <= n && v[pos1 + step].first <= p1)
pos1 += step;
v[pos1].first += p2;
break;
case 1:
for (step = 1; (step << 1) <= n; step <<= 1);
for (pos1 = 0; step; step >>= 1)
if (pos1 + step <= n && v[pos1 + step].first < p1)
pos1 += step;
for (step = 1; (step << 1) <= n; step <<= 1);
for (pos2 = 0; step; step >>= 1)
if (pos2 + step <= n && v[pos2 + step].first <= p2)
pos2 += step;
int mxm = 0;
for (int j = 1; j <= 64; ++j)
mxm = max(mxm, s[pos2][j] - s[pos1][j]);
fout << mxm << '\n';
break;
}
}
fin.close();
fout.close();
}