Pagini recente » Cod sursa (job #129151) | Cod sursa (job #2149088) | Cod sursa (job #675038) | Cod sursa (job #1589985) | Cod sursa (job #1133162)
#include <cstdio>
#include <cassert>
#include <algorithm>
using namespace std;
const int MAX_C = 64;
const int MAX_N = 100000;
int N, Q, Sums[MAX_C][MAX_N + 1];
pair<int, int> Marbles[MAX_N];
void Solve() {
sort(Marbles, Marbles + N);
for (int c = 0; c < MAX_C; ++c) {
Sums[c][0] = 0;
for (int i = 1; i <= N; ++i) {
Sums[c][i] = Sums[c][i - 1];
if (Marbles[i - 1].second == c)
++Sums[c][i];
}
}
for (; Q > 0; --Q) {
int type;
assert(scanf("%d", &type) == 1);
if (type == 0) {
int where, add;
assert(scanf("%d %d", &where, &add) == 2);
Marbles[lower_bound(Marbles, Marbles + N, make_pair(where, -1)) - Marbles].first += add;
} else {
int from, to;
assert(scanf("%d %d", &from, &to) == 2);
if (Marbles[N - 1].first < from || to < Marbles[0].first) {
printf("0\n");
} else {
from = lower_bound(Marbles, Marbles + N, make_pair(from, -1)) - Marbles;
to = upper_bound(Marbles, Marbles + N, make_pair(to, MAX_C)) - Marbles - 1;
int answer = 0;
for (int c = 0; c < MAX_C; ++c)
answer = max(answer, Sums[c][to + 1] - Sums[c][from]);
printf("%d\n", answer);
}
}
}
}
void Read() {
assert(scanf("%d %d", &N, &Q) == 2);
for (int i = 0; i < N; ++i) {
assert(scanf("%d %d", &Marbles[i].first, &Marbles[i].second) == 2);
--Marbles[i].second;
}
}
int main() {
assert(freopen("marbles.in", "r", stdin));
assert(freopen("marbles.out", "w", stdout));
Read();
Solve();
return 0;
}