Pagini recente » Cod sursa (job #1041498) | Cod sursa (job #703934) | Cod sursa (job #284874) | Cod sursa (job #3263457) | Cod sursa (job #2010491)
#include <fstream>
using namespace std;
#define MAX 100005
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n, m, v[MAX], o, x, y, aint[4 * MAX], q;
///indicele nodului - k, parametrii intervalului - x,y
void arbore(int k, int a, int b)
{
if(a == b)
{
aint[k] = v[a];
return;
}
int mij = (a + b) / 2;
arbore(2 * k, a, mij);
arbore(2 * k + 1, mij + 1, b);
aint[k] = max(aint[2 * k], aint[2 * k + 1]);
}
void query(int k, int a, int b)
{
if(a >= x and b <= y)
{
q = max(aint[k], q);
return;
}
int mij = (a + b) / 2;
if(x <= mij)
{
query(2 * k, a, mij);
}
if(y > mij)
{
query(2 * k + 1, mij + 1, b);
}
}
void update(int k, int a, int b)
{
if(b == a)
{
aint[k] = y;
return;
}
int mij = (a + b) / 2;
if(x <= mij)
{
update(2 * k, a, mij);
}
else
{
update(2 * k + 1, mij + 1, b);
}
aint[k] = max(aint[2 * k], aint[2 * k + 1]);
}
int main()
{
cin >> n >> m;
for(int i = 1; i <= n; ++i)
{
cin >> v[i];
}
arbore(1, 1, n);
for(int i = 1; i <= m; ++i)
{
cin >> o >> x >> y;
if(o == 0)
{
q = 0;
query(1, 1, n);
cout << q << '\n';
}
else
{
update(1, 1, n);
}
}
return 0;
}