Pagini recente » Cod sursa (job #2309033) | Cod sursa (job #1842735) | Cod sursa (job #293034) | Cod sursa (job #422642) | Cod sursa (job #2122483)
#include <iostream>
#include <fstream>
#define NMAX 200002
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int v[NMAX], n, m;
const int INF = 1e9;
void build()
{
int i;
for(i=1;i<=n;++i)
f>>v[n+i-1];
for(i=n-1;i>0;--i)
v[i]=max(v[i<<1], v[i<<1|1]); //i/2 i/2+1
}
void update(int p, int x)
{
p+=n-1;
v[p]=x;
p>>=1;
for(;p>0;p>>=1)
v[p]=max(v[p<<1], v[p<<1|1]);
}
int query(int a, int b)
{
int rez=-INF;
a+=n-1;
b+=n; //b+=n-1+1;
for(;a<b;a>>=1,b>>=1){
if(a&1)rez=max(rez, v[a++]);
if(b&1)rez=max(rez, v[--b]);
}
return rez;
}
int main()
{
int i, op, a, b;
f>>n>>m;
build();
for(i=1;i<=m;i++){
f>>op>>a>>b;
if(op==0) g<<query(a, b)<<'\n';
else update(a, b);
}
return 0;
}