Pagini recente » Cod sursa (job #143881) | Cod sursa (job #1458987) | Cod sursa (job #2426262) | Cod sursa (job #965838) | Cod sursa (job #2406156)
#include <stdio.h>
#include <fstream>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
#define dim 100005
int N, M, arbore[1000005];
int valoare, pozitie, operatie, a, b, maxim, start, finish;
int Maxim ( int a, int b )
{
if ( a >= b ) return a;
return b;
}
void Actualizare ( int nod, int stanga, int dreapta )
{
if ( stanga == dreapta )
{
arbore[nod] = valoare;
return;
}
int mijloc = ( stanga + dreapta ) / 2;
if ( pozitie <= mijloc )
Actualizare ( 2 * nod, stanga, mijloc );
else
Actualizare ( 2 * nod + 1, mijloc + 1, dreapta );
arbore[nod] = Maxim ( arbore[2 * nod], arbore[2 * nod + 1]);
}
void Interogare ( int nod, int stanga, int dreapta )
{
if ( start <= stanga && finish >= dreapta )
{
if ( maxim < arbore[nod] )
maxim = arbore[nod];
return;
}
int mijloc = ( stanga + dreapta ) / 2;
if ( start <= mijloc ) Interogare ( 2 * nod, stanga, mijloc );
if ( finish > mijloc ) Interogare( 2 * nod + 1, mijloc + 1, dreapta );
}
int main()
{
fin >> N >> M;
for ( int i = 1; i <= N; i++ )
{
fin >> valoare;
pozitie = i;
Actualizare ( 1, 1, N );
}
for ( int i = 1; i <= M; i++ )
{
fin >> operatie >> a >> b;
if ( operatie )
{
pozitie = a;
valoare = b;
Actualizare ( 1, 1, N );
}
else
{
maxim = -1;
start = a;
finish = b;
Interogare ( 1, 1, N );
fout << maxim << "\n";
}
}
}