Pagini recente » Cod sursa (job #1830596) | Cod sursa (job #177839) | Cod sursa (job #1640642) | Cod sursa (job #675618) | Cod sursa (job #976944)
Cod sursa(job #976944)
#include<cstdio>
#include<string.h>
#include <algorithm>
using namespace std;
int i, j, a[67][100003], aux, n, m, p1, p2, x, y, maxim, mi = 65, mx;
struct bila {
int p;
int c;
};
bila b[100003];
int cb1(int x) {//a cata bila este cea de la abscisa x
int st = 1, dr = n, mid;
while (st<=dr) {
mid = (st+dr)>>1;
if (b[mid].p == x)
return mid;
if (b[mid].p < x)
st = mid+1;
else
dr = mid-1;
}
return 0;
}
int cb2(int x){
int st=1, dr=n, mid;
while(st<=dr){
mid = (st+dr)>>1;
if(b[mid].p<=x)
st = mid+1;
else
dr = mid-1;
}
return dr;
}
int cmp(const bila &a, const bila &b) {
return a.p<b.p;
}
FILE *fin=fopen("marbles.in", "r");
FILE *fout=fopen("marbles.out", "w");
//int cb2(int x) //determina prima bila aflata pe o pozitie <= cu x
int main(){
fscanf(fin,"%d%d",&n, &m);
for(i=1; i<=n; i++){
fscanf(fin,"%d%d", &b[i].p, &b[i].c);
if (b[i].c > mx)
mx = b[i].c;
if (b[i].c < mi)
mi = b[i].c;
// a[c[i]][i]=a[c[i]][i-1]+1;
}
sort(b+1,b+n+1,cmp);
for (j=1;j<=64;j++)
for (i=1;i<=n;i++)
if (j == b[i].c)
a[j][i] = a[j][i-1]+1;
else
a[j][i] = a[j][i-1];
for(i=1; i<=m; i++){
fscanf(fin,"%d%d%d", &aux, &p1, &p2);
if (aux == 0) {
j = cb1(p1);
b[j].p += p2;
}
else{
x = cb2(p1-1);
y = cb2(p2);
maxim = 0;
for (j=mi;j<=mx;j++)
if (a[j][y] - a[j][x] > maxim)
maxim = a[j][y] - a[j][x];
fprintf(fout,"%d\n",maxim);
}
}
return 0;
}