Pagini recente » Cod sursa (job #270721) | Cod sursa (job #1342915) | Cod sursa (job #1014693) | Cod sursa (job #2179295) | Cod sursa (job #2241907)
#include <iostream>
#include <fstream>
using namespace std;
const int nmax = 40070;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int Arb[nmax];
int n, m;
int Begin, End, val, pos, maxim;
#define Max(a, b) ((a >b) ? a : b)
void actualizare(int nod, int l, int r)
{
if(l == r)
{
Arb[nod] = val;
return;
}
int mij=(l + r) / 2;
if (pos <= mij)
actualizare(2 * nod, l , mij);
else actualizare(2 * nod + 1, mij + 1, r);
Arb[nod]= Max(Arb[2 * nod], Arb [2 * nod +1]);
}
void interogare(int nod, int l, int r)
{
if(Begin <= l && r <= End){
if(maxim < Arb[nod])
maxim = Arb[nod];
return;
}
int mij = (l + r) / 2;
if (Begin <= mij)
interogare(2 *nod, l, mij);
if(mij < End)
interogare(2* nod +1, mij + 1, r);
}
int main()
{
int a, b, x;
fin >> n >> m;
for(int i = 1; i<= n; ++i)
{
fin >> x;
pos = i;
val = x;
actualizare (1, 1, n);
}
for ( int i = 1; i <= m; ++i)
{
fin >> x >> a >> b;
if (x == 0)
{
maxim = -1;
Begin = a ;
End = b;
interogare(1, 1, n);
fout << maxim << ' ';
fout << endl;
}
else {
pos = a;
val = b;
actualizare(1, 1, n);
}
}
return 0;
}