Pagini recente » Cod sursa (job #1026501) | Cod sursa (job #2221538) | Cod sursa (job #502282) | Cod sursa (job #2604955) | Cod sursa (job #2646065)
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, m, baza, tree[262145];
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 query(int st, int dr)
{
st += baza-1;
dr += baza-1;
int maxim = 0;
while(st <= dr)
{
if(st%2 == 1)
maxim = max(maxim, tree[st++]);
if(dr%2 == 0)
maxim = max(maxim, tree[dr--]);
st /= 2; dr /= 2;
}
return maxim;
}
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 != 0; k /= 2)
for(int i = k; i <= k*2-1; i++)
tree[i] = max(tree[i*2], tree[i*2+1]);
for(int i = 1, c, a, b; i <= m; i++)
{
in >> c >> a >> b;
if(c == 0)
out << query(a,b) << '\n';
else
update(a,b);
}
return 0;
}