Pagini recente » Cod sursa (job #2823131) | Cod sursa (job #3219431) | Cod sursa (job #2457382) | Cod sursa (job #2756565) | Cod sursa (job #2752413)
#include <iostream>
#include <fstream>
#define INF -2
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int tree[400000], v[100001];
int type, ind, value;
int n, m;
int sol;
int x, y;
void build( int left, int right, int node){
if(left == right){
tree[node] = v[left];
}
else{
int mid = (left + right) / 2;
build(left, mid, 2 * node);
build( mid + 1, right, 2 * node + 1);
tree[node] = max( tree[2*node], tree[2 * node + 1]);
}
}
void query(int left, int right, int node){
if(x <= left && y >= right){
sol = max( sol, tree[node]);
}
else{
int mid = (left + right) / 2;
if( x <= mid) query( left, mid, 2*node);
if( y > mid) query(mid+1, right, 2*node + 1);
}
}
void update(int left, int right, int node){
if ( left == right ){
tree[node] = v[left];
return ;
}
int mid;
mid = (left + right) / 2;
if(ind <= mid){
update( left, mid, 2*node);
}
else
update( mid + 1, right, 2 * node + 1);
tree[node] = max(tree[2*node], tree[2*node + 1]);
}
int main(){
fin >> n >> m;
for(int i = 1; i <= n; i++){
fin >> v[i];
}
build( 1, n, 1);
for(int i = 1; i <= m; i++){
fin >> type >> ind >> value;
if(!type){
sol = INF;
x = ind; y = value;
query( 1, n, 1);
fout << sol <<"\n";
}
else{
v[ind] = value;
update( 1, n, 1);
}
}
fin.close();
fout.close();
return 0;
}