Nu aveti permisiuni pentru a descarca fisierul grader_test6.ok
Cod sursa(job #3213043)
Utilizator | Data | 12 martie 2024 13:39:28 | |
---|---|---|---|
Problema | Arbori de intervale | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.53 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int v[100005], arb[4 * 100005], a, b, c, n, m;
void build(int nod, int s, int d)
{
int mijl;
if(s == d)
arb[nod] = v[s];
else
{
mijl = (s + d) / 2;
build(nod * 2, s, mijl);
build(nod * 2 + 1, mijl+ 1, d);
arb[nod] = max(arb[nod * 2], arb[nod * 2 + 1]);
}
}
void update(int nod, int s, int d, int p, int nr)
{
int mijl;
if(s == d)
arb[nod] = nr;
else
{
mijl = (s + d) / 2;
if(p <= mijl)
update(nod * 2, s, mijl, p, nr);
else
update(nod * 2 + 1, mijl + 1, d, p, nr);
arb[nod] = max(arb[nod * 2], arb[nod * 2 + 1]);
}
}
int query(int nod, int s, int d, int a, int b)
{
int mijl;
if(a <= s and d <= b)
return arb[nod];
else
{
mijl = (s + d) / 2;
if(b <= mijl)
return query(nod * 2, s, mijl, a, b);
if (mijl + 1 <= a)
return query(nod * 2 + 1, mijl + 1, d, a, b);
return max(query(nod * 2, s, mijl, a, b), query(nod * 2 + 1, mijl + 1, d, a, b));
}
}
int main()
{
f >> n >> m;
for(int i = 1; i <= n; i++)
{
f >> v[i];
}
build(1, 1, n);
for(int i = 1; i <= m; i++)
{
f >> a >> b >> c;
if(a == 0)
g << query(1, 1, n, b, c) << endl;
else
update(1, 1, n, b, c);
}
return 0;
}