Nu aveti permisiuni pentru a descarca fisierul grader_test4.in
Cod sursa(job #2018314)
Utilizator | Data | 4 septembrie 2017 14:59:22 | |
---|---|---|---|
Problema | Arbori de intervale | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.26 kb |
#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);
}
}
}