Pagini recente » Cod sursa (job #278227) | Clasament petru_vs_george | Cod sursa (job #2247859) | Cod sursa (job #1502686) | Cod sursa (job #704522)
Cod sursa(job #704522)
#include <fstream>
#include <stdio.h>
#define nm 100000
#define MAX(a, b) ((a > b) ? a : b)
using namespace std;
ifstream f ("arbint.in");
ofstream g ("arbint.out");
int n, m, v[nm], maxim;
int val, pos, start, finish;
void query(int nod, int left, int right)
{
if(start <= left && right <= finish)
{
maxim = MAX(maxim, v[nod]);
return;
}
int div = (left + right) / 2;
if(start <= div) query(nod * 2, left, div);
if(div < finish) query(nod * 2 + 1, div + 1, right);
}
void update(int nod, int left, int right)
{
if(left == right)
{
v[nod] = val;
return ;
}
int d = (left + right) / 2;
if(pos <= d) update(nod * 2, left, d);
else update(nod * 2 + 1, d + 1, right);
v[nod] = MAX(v[nod * 2], v[nod * 2 + 1]);
}
int main()
{
int x, a, b;
f >> n >> m;
for(int i = 1; i <= n; i ++)
{
f >> val;
pos = i;
update(1, 1, n);
}
for(int i = 0; i < m; i ++)
{
f >> x >> a >> b;
if(!x)
{
maxim = -1;
start = a;
finish = b;
query(1, 1, n);
g << maxim << "\n";
}
else
{
pos = a;
val = b;
update(1, 1, n);
}
}
}