Pagini recente » Cod sursa (job #2280244) | Cod sursa (job #1641664) | Cod sursa (job #1830979) | Cod sursa (job #1506774) | Cod sursa (job #976937)
Cod sursa(job #976937)
#include<cstdio>
#include<string.h>
using namespace std;
int i, j, c[100003], a[67][100003], aux, n, m, p1, p2, x, y, maxim, p[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)/2;
if (p[mid] == x)
return mid;
if (p[mid] < 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)/2;
if(p[mid]<=x)
st = mid+1;
else
dr = mid-1;
}
return dr;
}
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", &p[i], &c[i]);
// a[c[i]][i]=a[c[i]][i-1]+1;
}
for (j=1;j<=64;j++)
for (i=1;i<=n;i++)
if (j == c[i])
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);
p[j] += p2;
}
else{
x = cb2(p1-1);
y = cb2(p2);
maxim = 0;
for (j=1;j<=64;j++)
if (a[j][y] - a[j][x] > maxim)
maxim = a[j][y] - a[j][x];
fprintf(fout,"%d\n",maxim);
}
}
return 0;
}