Pagini recente » Cod sursa (job #2794526) | Cod sursa (job #820282) | Cod sursa (job #635860) | Cod sursa (job #676400) | Cod sursa (job #917455)
Cod sursa(job #917455)
#include <iostream>
#include <fstream>
#define NMAX 100100
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int N, M, start, finish, value, position;
int v[NMAX], aint[NMAX << 2];
inline int query(int nod, int st, int dr)
{
if (start <= st && dr <= finish)
return aint[nod];
int mid = (st + dr) >> 1, ret = 0;
if (start <= mid) ret = max(ret, query(nod << 1, st, mid));
if (mid < finish) ret = max(ret, query((nod << 1) + 1, mid + 1, dr));
return ret;
}
inline void update(int nod, int st, int dr)
{
if (st == dr)
{
aint[nod] = value; return ;
}
int mid = (st + dr) >> 1;
if (position <= mid) update(nod << 1, st, mid);
else
if (mid < position) update((nod << 1) + 1, mid + 1, dr);
aint[nod] = max(aint[nod << 1], aint[(nod << 1) + 1]);
}
int main()
{
fin >> N >> M;
for (int i = 1; i <= N; i++)
fin >> v[i], position = i, value = v[i], update(1, 1, N);
for (; M--; )
{
int t, a, b;
fin >> t >> a >> b;
if (t == 0)
{
start = a; finish = b;
fout << query(1, 1, N) << '\n';
}
else
{
position = a; value = b;
update(1, 1, N);
}
}
}