Pagini recente » Cod sursa (job #1018767) | Borderou de evaluare (job #2221195) | Cod sursa (job #866984) | Monitorul de evaluare | Cod sursa (job #866983)
Cod sursa(job #866983)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
int n, m;
int aint[262145];
int maxim, A, B, poz, val;
inline void Update(int nod, int left, int right)
{
if (left == right)
{
aint[nod] = val;
return ;
}
int mij = (left + right)/2;
if (poz <= mij)
Update (nod*2, left, mij);
else
Update (nod*2+1, mij+1, right);
aint[nod] = max (aint[nod*2], aint[nod*2+1]);
}
inline void Query (int nod, int left, int right)
{
if (A <= left && right <= B)
{
if (aint[nod] > maxim)
maxim = aint[nod];
return ;
}
int mij;
mij = (left + right)/2;
if (A <= mij)
Query (nod*2, left, mij);
if (mij < B)
Query (nod*2+1, mij+1, right);
}
int main()
{
ifstream f ("arbint.in");
ofstream g ("arbint.out");
f>>n>>m;
int i, cod, x, y;
for (i=1; i<=n; i++)
{
f>>val;
poz = i;
Update(1, 1, n);
}
for (i=1; i<=m; i++)
{
f>>cod>>x>>y;
if (cod == 0)
{
maxim = -1;
A = x;
B = y;
Query (1, 1, n);
g<<maxim<<"\n";
}
else
{
poz = x;
val = y;
Update(1, 1, n);
}
}
f.close();
g.close();
return 0;
}