Pagini recente » Cod sursa (job #897886) | Cod sursa (job #542415) | Cod sursa (job #2952306) | Cod sursa (job #2853080) | Cod sursa (job #2556848)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, baza, tree[270000];
void update(int poz, int val)
{
poz+=baza - 1;
tree[poz] = val;
poz/=2;
for(; poz; poz/=2)
tree[poz] = max(tree[poz*2], tree[poz*2 + 1]);
}
int maxim(int a, int b)
{
a+=baza - 1;
b+=baza - 1;
int maxim = 0;
for(; a<=b; a/=2, b/=2)
{
if(a % 2 == 1)
maxim = max(maxim, tree[a]), a++;
if(b%2 == 0)
maxim = max(maxim, tree[b]), b--;
}
return maxim;
}
int main()
{
fin>>n>>m;
baza = pow(2, (int)log2(n) + ( log2(n) > (int)log2(n) ? 1 : 0 )) + 0.5;
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 c, a, b, i = 1; i<=m; i++)
{
fin>>c>>a>>b;
if(c == 1)
update(a, b);
else
fout<<maxim(a, b)<<'\n';
}
return 0;
}