Pagini recente » Cod sursa (job #964749) | Cod sursa (job #2106846) | Cod sursa (job #1348879) | Cod sursa (job #12036) | Cod sursa (job #1866936)
#include <cstdio>
#include <algorithm>
#define MAXN 100001
#define MAXC 65
int v[MAXN], ml[MAXN], mc[MAXN];
int nr[MAXC][MAXN];
int n, lg;
bool cmp(int a, int b){
if(ml[a] < ml[b])
return 1;
return 0;
}
inline void precalc(){
int i, j;
for(j = 1; j <= MAXC; j++){
for(i = 1; i <= n; i++){
nr[j][i] = nr[j][i - 1];
if(mc[v[i]] == j)
nr[j][i]++;
}
}
}
inline int caut(int x){
int i = 0, pas;
for(pas = (1 << lg); pas > 0; pas /= 2){
if(i + pas < n && ml[v[i + pas]] < x)
i += pas;
}
return i;
}
int main(){
FILE *in = fopen("marbles.in", "r");
int m, t, x, y, ps, pd, rez, rc, i, j, aux;
fscanf(in, "%d%d", &n, &m);
lg = 0;
while((1 << lg) <= n)
lg++;
lg--;
for(i = 1; i <= n; i++){
fscanf(in, "%d%d", &ml[i], &mc[i]);
v[i] = i;
}
std::sort(v + 1, v + n + 1, cmp);
precalc();
FILE *out = fopen("marbles.out", "w");
for(i = 1; i <= m; i++){
fscanf(in, "%d%d%d", &t, &x, &y);
if(t == 0){
ps = caut(x + 1);
ml[v[ps]] += y;
}
else{
if(x > y){
aux = x; x = y; y = aux;
}
ps = caut(x);
pd = caut(y + 1);
rez = 0;
for(j = 1; j <= MAXC; j++){
rc = nr[j][pd];
rc -= nr[j][ps];
if(rc > rez)
rez = rc;
}
fprintf(out, "%d\n", rez);
}
}
fclose(in);
fclose(out);
return 0;
}