Pagini recente » Cod sursa (job #1954748) | Cod sursa (job #1331000) | Cod sursa (job #2354793) | Cod sursa (job #3151712) | Cod sursa (job #2723636)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, q, *tree, baza;
int maxim(int st, int dr)
{
st += baza - 1;
dr += baza - 1;
int maxx = 0;
while(st <= dr)
{
if(st % 2 == 1)
maxx = max(maxx, tree[st++]);
if(dr % 2 == 0)
maxx = max(maxx, tree[dr--]);
st /= 2; dr /= 2;
}
return maxx;
}
void update(int poz, int val)
{
poz += baza - 1;
tree[poz] = val;
poz /= 2;
while(poz)
{
tree[poz] = max(tree[poz*2], tree[poz*2+1]);
poz /= 2;
}
}
int main()
{
fin >> n >> q;
baza = 1<<(int)ceil(log2(n));
tree = new int[baza * 2];
for(int i = baza; i <= baza + n - 1; i++)
fin >> tree[i];
for(int k = baza / 2; k; k /= 2)
for(int i = k; i <= k * 2 - 1; i++)
tree[i] = max(tree[i*2], tree[i*2+1]);
for(int k = 1, cer, a, b; k <= q; k++)
{
fin >> cer >> a >> b;
if(cer == 1)
update(a, b);
else
fout << maxim(a, b) << '\n';
}
return 0;
}