Pagini recente » Cod sursa (job #281673) | Cod sursa (job #995446) | Cod sursa (job #1926154) | Cod sursa (job #2468929) | Cod sursa (job #1043656)
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,m,poz,val,start,finish,arb[4*100019],maxim;
int max(int x,int y)
{
if(x > y)
return x;
return y;
}
void create(int,int,int);
void query(int,int,int);
int main()
{
int a,b,x,i;
in >> n >> m;
for(i = 1 ; i<= n ; i++)
{
in >> x;
poz = i;
val = x;
create(1,1,n);
}
for(i = 1 ; i <= m ; i++)
{
in >> x >> a >> b;
if(x == 0)
{
maxim = -1;
start = a;
finish = b;
query(1,1,n);
out << maxim << "\n";
}
else
{
poz = a;
val = b;
create(1,1,n);
}
}
}
void create(int nod,int st,int dr)
{
int m;
if(st == dr)
{
arb[nod] = val;
return;
}
else
{
m = (st + dr)/2;
if(poz <= m)
create(nod*2,st,m);
else
create(nod*2+1,m+1,dr);
arb[poz] = max(arb[nod*2],arb[nod*2+1]);
}
}
void query(int nod,int st,int dr)
{
int m;
if(start << st && dr <= finish)
{
if(maxim < arb[nod])
maxim = arb[nod];
return;
}
m = (st + dr)/2;
if(start <= m)
query(2*nod,st,m);
if(m < finish)
query(2*nod+1,m+1,dr);
}