Pagini recente » Cod sursa (job #374176) | Cod sursa (job #590110) | Cod sursa (job #942274) | Cod sursa (job #2976291) | Cod sursa (job #2977841)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m;
int v[300000];
inline void Citire()
{
fin >> n >> m;
int p = 1;
while(p < n)
p = p*2;
for(int i = p; i < p + n; i ++)
fin >> v[i];
n = p;
for(int i = n - 1; i >= 1; i --)
{
v[i] = max(v[2 * i], v[2 * i + 1]);
}
}
int Query(int nod, int x, int y, int st, int dr)
{
if(st == x && dr == y)
return v[nod];
else
{
int mij = (st + dr)/2;
if(y <= mij)
return Query(2 * nod, x, y, st, mij);
else if(x >= mij + 1)
return Query(2 * nod + 1, x, y, mij + 1, dr);
else
return max(Query(2 * nod, x, mij, st, mij), Query(2 * nod + 1, mij + 1, y, mij + 1, dr));
}
}
void Update(int nod, int a)
{
nod = n + nod - 1;
v[nod] = a;
int t;
while(nod)
{
t = nod / 2;
v[t] = max(v[t * 2], v[t * 2 + 1]);
nod = t;
}
}
int main()
{
Citire();
for(int i = 1; i <= m; i ++)
{
int val, a, b;
fin >> val >> a >> b;
if(val == 0)
fout << Query(1, a, b, 1, n) << "\n";
else
Update(a, b);
}
return 0;
}