Pagini recente » Cod sursa (job #57243) | Cod sursa (job #599344) | Cod sursa (job #565086) | Cod sursa (job #2739179) | Cod sursa (job #540563)
Cod sursa(job #540563)
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define DIM 100001
int m, n;
int arb[4*DIM];
int inc, sf, maxim, val, poz;
void Read();
void Update(int nod, int st, int dr);
void Query(int nod, int st, int dr);
int main()
{
Read();
int x, y, v;
for ( int i = 1; i <= m; ++i )
{
fin >> v >> x >> y;
if ( v == 0 )
{
maxim = -1;
inc = x;
sf = y;
Query (1, 1, n);
fout << maxim << '\n';
}
else
{
poz = x;
val = y;
Update(1, 1, n);
}
}
}
void Read()
{
int x;
fin >> n >> m;
for ( int i = 1; i <= n; ++i )
{
fin >> x;
poz = i, val = x;
Update(1, 1, n);
}
}
void Update(int nod, int st, int dr)
{
if (st == dr)
{
arb[nod] = val;
return;
}
int mij = (st + dr)/2;
if ( poz <= mij )
Update( 2*nod, st, mij);
else
Update( 2*nod+1, mij+1, dr);
arb[nod] = max( arb[2*nod], arb[2*nod+1] );
}
void Query(int nod, int st, int dr)
{
if ( inc <= st && dr <= sf )
{
if ( maxim < arb[nod] )
maxim = arb[nod];
return;
}
int mij = (st+dr)/2;
if ( inc <= mij )
Query( 2*nod, st, mij);
if ( mij < sf )
Query( 2*nod+1, mij+1, dr);
}