Pagini recente » Cod sursa (job #2004399) | Cod sursa (job #46502) | Cod sursa (job #2716838) | Cod sursa (job #1501796) | Cod sursa (job #2686196)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int MAXN=100005;
const int MAXS=sqrt(MAXN)+5;
int n,m,a[MAXN],b[MAXS],s;
void build(){
for(int i=1; i<=n; i++){
int j=i/s;
b[j]=max(b[j],a[i]);
}
}
void update(int pos,int val){
a[pos]=val;
int j=pos/s;
b[j]=0;
for(int i=j*s; i<=(j+1)*s-1; i++)
b[j]=max(b[j],a[i]);
}
int query(int l,int r){
int jl=l/s,jr=r/s;
int mx=0;
if(jl==jr){
if(l==jl*s&&r==(jr+1)*s-1)
return b[jl];
for(int i=l; i<=r; i++)
mx=max(mx,a[i]);
return mx;
}
if(l==jl*s)
mx=max(mx,b[jl]);
else
for(int i=l; i<=(jl+1)*s-1; i++)
mx=max(mx,a[i]);
for(int j=jl+1; j<jr; j++)
mx=max(mx,b[j]);
if(r==(jr+1)*s-1)
mx=max(mx,b[jr]);
else
for(int i=jr*s; i<=r; i++)
mx=max(mx,a[i]);
return mx;
}
int main(){
f>>n>>m;
s=sqrt(n);
for(int i=1; i<=n; i++){
f>>a[i];
}
build();
for(int i=0; i<m; i++){
int x,y,t;
f>>t>>x>>y;
if(t==1)
update(x,y);
else
g<<query(x,y)<<"\n";
}
return 0;
}