Pagini recente » Cod sursa (job #2808628) | Cod sursa (job #1559595) | Cod sursa (job #1850232) | Cod sursa (job #405990) | Cod sursa (job #3292324)
#include <stdio.h>
#include <algorithm>
int aint[1024*256];
int n2;
void update(int i, int x){
i+=n2;
aint[i]=x;
i/=2;
while(i){
aint[i]=std::max(aint[i*2], aint[2*i+1]);
i>>=1;
}
}
int query(int l, int r){
l+=n2;r+=n2;
int max=0;
while(l<=r){
if(l&1){
max=std::max(max, aint[l]);
l++;
}
l>>=1;
if(!(r&1)){
max=std::max(max, aint[r]);
r--;
}
r>>=1;
}
return max;
}
int main(){
FILE *fin, *fout;
int n,m,i,x,y,type;
fin=fopen("arbint.in", "r");
fscanf(fin, "%d%d", &n, &m);
n2=1;
while(n2<n)
n2*=2;
for(i=0; i<n; i++){
fscanf(fin, "%d", &aint[n2+i]);
}
for(i=n2-1; i>0; i--)
aint[i]=std::max(aint[2*i], aint[2*i+1]);
fout=fopen("arbint.out", "w");
for(i=0; i<m; i++){
fscanf(fin, "%d%d%d", &type, &x, &y);
x--;
if(type==0)
fprintf(fout, "%d\n", query(x, y-1));
else
update(x, y);
}
fclose(fin);
fclose(fout);
return 0;
}