Pagini recente » Cod sursa (job #1871289) | Cod sursa (job #2204664) | Cod sursa (job #979825) | Cod sursa (job #235129) | Cod sursa (job #2238744)
#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);
}
}
}