Pagini recente » Cod sursa (job #1335979) | Cod sursa (job #2451490) | Cod sursa (job #1281633) | Monitorul de evaluare | Cod sursa (job #1409924)
#include <stdio.h>
#include <fstream>
#include <algorithm>
using namespace std;
#define N 100001
ifstream in ("arbint.in");
ofstream out ("arbint.out");
int n,h[4*N],start,finish,q,p,k;
void update(int x, int st, int dr)
{
if(st==dr)
h[x]=q;
else
{
int m=(st+dr)/2;
if(p<=m)
update(2*x,st,m);
else
update(2*x+1,m+1,dr);
h[x]=max(h[2*x],h[2*x+1]);
}
}
void query(int x, int st, int dr)
{
if(start<=st&&dr<=finish)
{
if(k<h[x])
k=h[x];
}
else
{
int m=(st+dr)/2;
if(start<=m)
query(2*x,st,m);
if(m<finish)
query(2*x+1,m+1,dr);
}
}
int main()
{
int m,x,a,b;
in>>n>>m;
for(int i=1;i<=n;i++)
{
in>>x;
p=i;
q=x;
update(1,1,n);
}
while(m--)
{
in>>x>>a>>b;
if(x==0)
{
k=-1;
start=a;
finish=b;
query(1,1,n);
out<<k<<'\n';
}
else
{
p=a;
q=b;
update(1,1,n);
}
}
}