Pagini recente » Cod sursa (job #1454847) | Cod sursa (job #186068) | Cod sursa (job #3280928) | Cod sursa (job #1121652) | Cod sursa (job #2701263)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int N = 100041;
int n, m;
int bn;
int tre[N*4];
void _deb(int cp=1){
cout << tre[cp];
if(tre[cp*2] || tre[cp*2+1]){
cout << "{";
bool c=false;
if(tre[cp*2]){_deb(cp*2);c=true;}
if(tre[cp*2+1]){if(c){cout<<" ";}_deb(cp*2+1);}
cout << "}";
}
}
void deb(){
_deb();
cout << "\n";
}
void meset(int p, int v){
int cp = bn+p-1;
tre[cp] = v;
while(cp > 1){
cp /= 2;
tre[cp] = max(tre[cp*2], tre[cp*2+1]);
}
}
int meget(int lt, int rt, int cp=1, int clt=1, int crt=bn){
int mid = (clt+crt)/2;
if(clt == lt && crt == rt){
return tre[cp];
}else if(lt >= clt && rt <= mid){
return meget(lt, rt, cp*2, clt, mid);
}else if(lt > mid && rt <= crt){
return meget(lt, rt, cp*2+1, mid+1, crt);
}else{
return max(
meget(lt, mid, cp*2, clt, mid),
meget(mid+1, rt, cp*2+1, mid+1, crt));
}
}
void makebn(){
bn = 1;
while(bn < n){
bn *= 2;
}
}
void meinit(){
for(int i = bn; i < bn+n; ++i){
fin >> tre[i];
}
for(int i = bn-1; i >= 1; --i){
tre[i] = max(tre[i*2], tre[i*2+1]);
}
}
int main(){
// ios_base::sync_with_stdio(false);
fin >> n >> m;
makebn();
meinit();
for(int i = 0; i < m; ++i){
int op, a, b;
fin >> op >> a >> b;
if(op == 0){
fout << meget(a, b) << "\n";
}else{
meset(a, b);
}
}
return 0;
}