Pagini recente » Cod sursa (job #790969) | Cod sursa (job #3152116) | Cod sursa (job #1484034) | Cod sursa (job #1364778) | Cod sursa (job #3292348)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, n2, aint[131072*2], m, c, x, y;
void update(int i, int val){
i+=n2;
aint[i]=x;
i/=2;
while(i){
aint[i]=max(aint[i*2], aint[2*i+1]);
i>>=1;
}
}
int query(int l, int r){
l+=n2;
r+=n2;
int maxim=0;
while(l<=r){
if(l&1){
maxim=std::max(maxim, aint[l]);
l++;
}
l>>=1;
if(!(r&1)){
maxim=std::max(maxim, aint[r]);
r--;
}
r>>=1;
}
return maxim;
}
int main(){
fin>>n>>m;
n2=1;
while(n2<n)n2*=2;
for(int i=0;i<n;i++)
fin>>aint[n2+i];
for(int i=n2-1;i;i--)
aint[i]=max(aint[i*2], aint[i*2+1]);
for(int i=0;i<m;i++){
fin>>c>>x>>y;
--x;
if(!c)fout<<query(x, y-1)<<"\n";
else update(x, y);
}
return 0;
}