Pagini recente » Cod sursa (job #3195947) | Cod sursa (job #2300050) | Cod sursa (job #586166) | Cod sursa (job #2195208) | Cod sursa (job #1046699)
#include <iostream>
#include <fstream>
std::ifstream fin("arbint.in");
std::ofstream fout("arbint.out");
int n, m, arbori[400001];
int maxim, a, b;
void update(int nod, int left, int right, int index, int val)
{
if(left == right)
{
arbori[nod] = val;
return;
}
int mij = (left + right) / 2;
if(index <= mij)
{
update(2 * nod, left, mij, index, val);
}
else
{
update(2 * nod + 1, mij + 1, right, index, val);
}
if(arbori[2 * nod] > arbori[2 * nod + 1])
{
arbori[nod] = arbori[2 * nod];
}
else
{
arbori[nod] = arbori[2 * nod + 1];
}
}
void query(int nod, int left, int right)
{
if(a <= left && right <= b)
{
if(maxim < arbori[nod])
{
maxim = arbori[nod];
}
return;
}
int mij = (left + right) / 2;
if(a <= mij)
{
query(2 * nod, left, mij);
}
if(mij < b)
{
query(2 * nod + 1, mij + 1, right);
}
}
void citire()
{
fin>>n>>m;
int x;
for(int i = 1; i <= n; i++)
{
fin>>x;
maxim = -1;
update(1, 1, n, i, x);
}
for(int i = 1; i <= m; i++)
{
fin>>x>>a>>b;
if(x == 0)
{
maxim = -1;
query(1, 1, n);
fout<<maxim<<'\n';
}
else
{
update(1, 1, n, a, b);
}
}
}
int main()
{
citire();
return 0;
}