Pagini recente » Cod sursa (job #1019440) | Cod sursa (job #1276466) | Cod sursa (job #2989192) | Cod sursa (job #2178081) | Cod sursa (job #2987773)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("marbles.in");
ofstream fout("marbles.out");
int n, m, c, x, y, dp[100005][70];
pair<int, int> v[100005];
// dp[i][j] = cate bilute de cul j au fost gasite pana la i
int cb(int x) {
int i = 0, pas = (1 << 16);
while(pas > 0) {
if(i + pas <= n && v[i + pas].first < x) {
i += pas;
}
pas >>= 1;
}
return i + 1;
}
int main() {
fin >> n >> m;
for(int i = 1; i <= n; i++) {
fin >> v[i].first >> v[i].second;
}
sort(v + 1, v + n + 1);
// precalc
for(int i = 1; i <= n; i++) {
// copiez linia anterioara
for(int j = 1; j <= 64; j++) {
dp[i][j] = dp[i - 1][j];
}
// actualizez cu elem curent
dp[i][v[i].second]++;
}
for(int i = 1; i <= m; i++) {
fin >> c >> x >> y;
if(c == 0) {
// caut binar ind
int p = cb(x);
v[p].first += y;
} else {
// caut binar cele 2 pozitii
int ii = cb(x), jj = cb(y);
// daca jj
if(v[jj].first > y) {
jj--;
}
int ans = 0;
// asemanator cu sumele partiale
for(int j = 1; j <= 64; j++) {
ans = max(ans, dp[jj][j] - dp[ii - 1][j]);
}
fout << ans << "\n";
}
}
return 0;
}