Pagini recente » Cod sursa (job #676066) | Cod sursa (job #2289371) | Cod sursa (job #1018256) | Cod sursa (job #884407) | Cod sursa (job #2824145)
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, m, vec_max[200001], x, y, vmax;
bool op;
void update(int nod, int l, int r)
{
if(l == r) vec_max[nod] = y;
else
{
int m = (l + r)/2;
if(x <= m) update(2*nod, l, m);
else update(2*nod+1, m+1, r);
vec_max[nod] = max(vec_max[2*nod], vec_max[2*nod+1]);
}
}
void read()
{
in >> n >> m;
for(int i = 1; i <= n; ++i)
{
x = i;
in >> y;
update(1, 1, n);
}
}
void query(int nod, int l, int r)
{
if(x <= l && r <= y)
{
if(vmax < vec_max[nod])
vmax = vec_max[nod];
}
else
{
int m = (l + r)/2;
if(x <= m) query(2*nod, l, m);
if(m < y) query(2*nod+1, m+1, r);
}
}
int main()
{
read();
while(m--)
{
in >> op >> x >> y;
if(op) update(1, 1, n);
else
{
vmax = 0;
query(1, 1, n);
out << vmax << '\n';
}
}
return 0;
}