Pagini recente » Cod sursa (job #1271435) | Cod sursa (job #2750944) | Cod sursa (job #1485008) | Cod sursa (job #2279190) | Cod sursa (job #2658766)
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, m;
int baza, tree[262144];
int query(int a, int b)
{
a += baza-1;
b += baza-1;
int rez = 0;
while(a<=b)
{
if(a%2 == 1)
{
rez = max(rez, tree[a]);
a++;
}
if(b%2 == 0)
{
rez = max(rez, tree[b]);
b--;
}
a /= 2;
b /= 2;
}
return rez;
}
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()
{
in >> n >> m;
baza = 1 << (int)ceil(log2(n));
for(int i = baza; i <= baza+n-1; i++)
in >> 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; m; m--)
{
in >> c >> a >> b;
if(c == 0)
out << query(a, b) << '\n';
else
update(a, b);
}
return 0;
}