Pagini recente » Cod sursa (job #2690942) | Cod sursa (job #2134424) | Cod sursa (job #1534164) | Cod sursa (job #357935) | Cod sursa (job #1759861)
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
#define NMAX 100005
using namespace std;
int n, m;
int tree[NMAX << 1];
void Build(){
for (int i = n - 1; i; --i){
tree[i] = max(tree[i << 1], tree[i << 1 | 1]);
}
}
void Update(int poz, int val)
{
tree[poz += n] = val;
for (poz >>= 1; poz >= 1; poz >>= 1)
tree[poz] = max(tree[poz << 1], tree[poz << 1 | 1]);
}
int Query(int st, int dr)
{
int res = 0;
for (st += n, dr += n; st <= dr; st >>= 1, dr >>= 1){
if (st & 1) res = max(res, tree[st++]);
if (!(dr & 1)) res = max(res, tree[dr--]);
}
return res;
}
int main()
{
ifstream fin("arbint.in");
ofstream fout("arbint.out");
//#define fin cin
//#define fout cout
fin >> n >> m;
for (int i = 0; i < n; ++i)
{
fin >> tree[i + n];
}
Build();
for (int i = 0; i < m; ++i)
{
int t, a, b;
fin >> t >> a >> b;
if (t == 0)
fout << Query(a - 1, b - 1) << '\n';
else{
Update(a - 1, b);
}
}
return 0;
}