Pagini recente » Cod sursa (job #758570) | Cod sursa (job #1774233) | Cod sursa (job #1181045) | Cod sursa (job #2785936) | Cod sursa (job #2973805)
#include<bits/stdc++.h>
using namespace std;
ifstream in ("arbint.in");
ofstream out("arbint.out");
// auto& in = cin;
// auto& out = cout;
int const N = 200099;
int const MIN = -1;
int n, m, v[N];
void read_and_build()
{
in>>n>>m;
int e = 2*n;
for(int i=n; i<e; i++)
in>>v[i];
for(int i=n-1; i; i--)
v[i] = max(v[2*i], v[2*i+1]);
}
void update(int idx, int val)
{
int p = idx + n;
v[p] = val;
for(int u=p/2; u; u/=2)
v[u] = max(v[2*u], v[2*u+1]);
}
int get(int from, int to)
{
int rez = MIN;
for(from += n, to += n; from < to; from/=2, to/=2)
{
if(from & 1 == 1) rez = max(rez, v[from++]);
if(to & 1 == 1) rez = max(rez, v[--to]);
}
return rez;
}
int main(){
read_and_build();
for(int i=0; i<m; i++)
{
int o, a, b;
in>>o>>a>>b;
if(o == 0) out<<get(a-1, b)<<endl;
else update(a-1, b);
}
return 0;
}