#include <isotream>
#include <stdio.h>
#include <string.h>
#define maxn 10000
using namespace std;
tree[maxn << 2]
void build(int l, int r, int rt)
{
if( l == r )
{
scanf("%d",&tree[rt]);
return ;
}
int mid = (r + l) >> 1;
build(l , mid, rt << 1 );
build(mid +£±, r , rt << 1|1);
tree[rt] = max(tree[rt<<1], tree[rt<<1|1]);
return ;
}
void update(int pos, int l, int r,int rt, int val)
{
if( pos == l && l == r)
{
tree[rt] = val;
return ;
}
int mid = (l + r ) >> 1;
if(pos <= mid )
update(pos, l, mid, rt << 1 , val);
else
upadate( pos, mid, r, rt << 1, val);
tree[rt] = max(tree[rt<<1], tree[rt<<1|1]);
return ;
}
int solve(int L, int R, int l, int r,int rt)
{
if( L <= l&& R>=r )
return tree[rt];
int ls(0),rs(0);
int mid = (r+l)>>1;
if(mid >= L)
ls = max(L,mid,l,r,rt);
}
#include <stdio.h>
#include <string.h>
#define maxn 10000
using namespace std;
tree[maxn << 2]
void build(int l, int r, int rt)
{
if( l == r )
{
scanf("%d",&tree[rt]);
return ;
}
int mid = (r + l) >> 1;
build(l , mid, rt << 1 );
build(mid +£±, r , rt << 1|1);
tree[rt] = max(tree[rt<<1], tree[rt<<1|1]);
return ;
}
void update(int pos, int l, int r,int rt, int val)
{
if( pos == l && l == r)
{
tree[rt] = val;
return ;
}
int mid = (l + r ) >> 1;
if(pos <= mid )
update(pos, l, mid, rt << 1 , val);
else
upadate( pos, mid, r, rt << 1, val);
tree[rt] = max(tree[rt<<1], tree[rt<<1|1]);
return ;
}
int solve(int L, int R, int l, int r,int rt)
{
if( L <= l&& R>=r )
return tree[rt];
int ls(0),rs(0);
int mid = (r+l)>>1;
if(mid >= L)
ls = max(L,mid,l,r,rt);
}