Pagini recente » Cod sursa (job #3179092) | Cod sursa (job #2510627) | Cod sursa (job #1074502) | Cod sursa (job #2670240) | Cod sursa (job #751621)
Cod sursa(job #751621)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
#define max(a,b) ((a>b)?a:b);
int main(){
const int inf=1<<30;
ifstream cinr ("arbint.in");
ofstream cour ("arbint.out");
int n1,dir,n,m,a,b,r;
cinr >> n1;
cinr >> m;
n=1<<int(log(n1-1)/log(2)+1);
vector<int> v(2*n,-inf);
for(int j=n; j<n+n1; j++){ cinr >> v[j]; }
for(int j=n-1; j>0; j--) { v[j]=max(v[j*2], v[j*2+1])}
for(int j=1; j<=m; j++){
cinr >> dir;
if(dir==0){
r=-inf;
cinr >> a; a+=n-1;
cinr >> b; b+=n-1;
while(b>=a){
if(a%2==1){ r=max(r,v[a]); }
if(b%2==0){ r=max(r,v[b]); }
a=(a+1)/2;
b=(b-1)/2;
}
cour << r << "\n";
}
else {
cinr >> a; a+=n-1;
cinr >> b;
v[a]=b; a/=2;
while(a>0){
v[a]=max(v[2*a], v[2*a+1]);
a/=2;
}
}
}
//for(int j=0; j<2*n; j++){ cout << v[j] << " "; }
cinr.close(); cour.close();
//cin.ignore(2);
return 0;
}