Pagini recente » Cod sursa (job #86331) | Cod sursa (job #1277825) | Cod sursa (job #685798) | Cod sursa (job #645846) | Cod sursa (job #161168)
Cod sursa(job #161168)
#include <cstdio>
#include <cassert>
#include <algorithm>
using namespace std;
#define mp make_pair
#define x first
#define y second
#define INF 2000000000
#define MAXN 100005
#define MAXC 64
int N, M;
pair<int, int> Bila[MAXN];
int S[MAXN][MAXC];
inline int max(int a, int b) { return (a > b ? a : b); }
int search(int a) {
int st = 0, dr = N, mij;
while (st != dr) {
mij = (st + dr + 1) / 2;
if (Bila[mij].x <= a) st = mij;
else dr = mij-1;
}
return st;
}
int main() {
freopen("marbles.in", "r", stdin);
freopen("marbles.out", "w", stdout);
assert(scanf("%d %d", &N, &M) == 2);
assert(1 <= N && N <= 100000);
assert(1 <= M && M <= 100000);
for (int i = 1; i <= N; ++i) {
assert(scanf("%d %d", &Bila[i].x, &Bila[i].y) == 2);
assert(1 <= Bila[i].y && Bila[i].y <= 64);
}
Bila[0].x = -INF;
sort(Bila+1, Bila+N+1);
for (int i = 1; i <= N; ++i) {
for (int j = 0; j < MAXC; ++j)
S[i][j] = S[i-1][j];
++S[i][Bila[i].y-1];
}
for (int i = 0; i < M; ++i) {
int op, a, b;
assert(scanf("%d %d %d", &op, &a, &b) == 3);
if (op == 0) {
int poz = search(a);
assert(Bila[poz].x == a);
Bila[poz].x += b;
}
else {
int p1 = search(a);
int p2 = search(b);
if (p1 && Bila[p1].x == a) --p1;
int best = 0;
for (int j = 0; j < MAXC; ++j)
best = max(best, S[p2][j] - S[p1][j]);
printf("%d\n", best);
}
}
}