Pagini recente » Cod sursa (job #590526) | Cod sursa (job #1989472) | Cod sursa (job #2611110) | Borderou de evaluare (job #1036556) | Cod sursa (job #2502824)
#include <fstream>
#include <math.h>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,m,r,v[101005];
struct nod{
int a,b,m;
}s[320];
int main(){
int i,j,k,x,c,a,b;
cin>>n>>m;
r=1+sqrt(n);
for(i=1;i<=n;i++)cin>>v[i];
for(x=0,k=0,i=1,j=1;i<=n;i++){
x=max(x,v[i]);
if(i%r==0 || i==n){
k++;
s[k]={j,i,x};
j=i+1;
x=0;
}
}
while(m--){
cin>>c>>a>>b;
if(c==0){
i=1+(a-1)/r;
j=1+(b-1)/r;
if(i==j){
x=0;
while(a<=b){
x=max(x,v[a]);
a++;
}
cout<<x<<"\n";
}
else{
x=0;
while(a<=s[i].b){
x=max(x,v[a]);
a++;
}
while(i<j){
x=max(x,s[i].m);
i++;
}
a=s[j].a;
while(a<=b){
x=max(x,v[a]);
a++;
}
cout<<x<<"\n";
}
}
else{
v[a]=b;
i=1+(a-1)/r;
x=0;
for(j=s[i].a;j<=s[i].b;j++){
x=max(x,v[j]);
}
s[i].m=x;
}
}
cin.close(); cout.close();
return 0;
}