Pagini recente » Cod sursa (job #623564) | Cod sursa (job #651495) | Cod sursa (job #2053015) | Cod sursa (job #1043294) | Cod sursa (job #2238790)
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int NMAX = 1e5 + 5;
int tree[4*NMAX], pos, val, l, r, rez;
void update(int root, int st, int dr)
{
if (st == dr)
tree[root] = val;
else
{
int m = (st+dr)/2;
if (pos<=m)
update(2*root,st,m);
else
update(2*root+1,m+1,dr);
tree[root] = max(tree[2*root],tree[2*root+1]);
}
}
void query(int root, int st, int dr)
{
if (l<=st && dr<=r)
rez = max(rez,tree[root]);
else
{
int m = (st+dr)/2;
if (l<=m)
query(2*root,st,m);
if (r>m)
query(2*root+1,m+1,dr);
}
}
int main(){
int n, m;
in >> n >> m;
for(int i = 1; i <= n; i++){
int x;
in >> x;
pos = i;
val = x;
update(1, 1, n);
}
for(int i = 1; i <= m; i++){
int t,x,y;
in >> t >> x >> y;
if(!t){
rez = -1;
l = x;
r = y;
query(1,1,n);
out << rez << "\n";
}
else{
pos = x;
val = y;
update(1, 1, n);
}
}
return 0;
}