Pagini recente » Istoria paginii utilizator/ianculescu_denisa | Diferente pentru utilizator/iacobtudor intre reviziile 67 si 68 | Sandu Ciorba | Diferente pentru planificare/sedinta-20110612 intre reviziile 14 si 13 | Cod sursa (job #2018314)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int arb[100001], x, pozitie, a, b, maxim;
void update (int nod, int st, int dr)
{
if ( st == dr )
{
arb[nod] = x;
return;
}
int mij = st+ (dr - st)/2;
if ( pozitie <= 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 ( st >= a && dr <= b )
{
maxim = max (maxim, arb[nod]);
return;
}
int mij = st + (dr - st)/2;
if ( a <= mij )
query (2 * nod, st, mij);
if ( mij < b )
query (2 * nod + 1, mij + 1, dr);
}
int main()
{
int n, m, cod;
fin>>n>>m;
for ( int i = 1; i <= n; ++i )
{
fin>>x;
pozitie = i;
update (1, 1, n);
}
while ( m-- )
{
fin>>cod>>a>>b;
if ( cod == 0 )
{
maxim = 0;
query (1, 1, n);
fout<<maxim<<'\n';
}
else
{
pozitie = a;
x = b;
update (1, 1, n);
}
}
}