Pagini recente » Cod sursa (job #17240) | Cod sursa (job #1167190) | Cod sursa (job #1059682) | Cod sursa (job #2338169) | Cod sursa (job #2271998)
#include<fstream>
#include<cmath>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,m,a[100005],b[1005],rad,k,x,y,tip;
int gbk(int i){
return (i-1)/rad+1;
}
int query(int s,int d){
int maxim=-1,bs=gbk(s),bd=gbk(d);
if(bs==bd){
for(int i=s;i<=d;i++)
maxim=max(maxim,a[i]);
return maxim;
}
for(int i=s,cp=bs*rad;i<=cp;i++)
maxim=max(maxim,a[i]);
for(int i=bs+1;i<bd;i++)
maxim=max(maxim,b[i]);
for(int i=(bd-1)*rad+1;i<=d;i++)
maxim=max(maxim,a[i]);
return maxim;
}
void update(int index,int val){
a[index]=val;
int bi=gbk(index),s=(bi-1)*rad+1,d=bi*rad;
b[bi]=a[s];
for(int i=s+1;i<=d;i++)
b[bi]=max(b[bi],a[i]);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
rad=sqrt(n)+1; k=(n-1)/rad+1;
for(int i=1;i<=n;i++){
if((i-1)%rad==0) b[gbk(i)]=a[i];
else b[gbk(i)]=max(a[i],b[gbk(i)]);
}
while(m--){
cin>>tip>>x>>y;
if(tip==0) cout<<query(x,y)<<'\n';
else update(x,y);
}
}