#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a, b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define DBG printf("this is a input\n")
ll gcd(ll a, ll b) {
return b == 0 ? a : gcd(b, a % b);
}
ll lcm(ll a, ll b) {
return a / gcd(a, b) * b;
}
int n; //给定序列长度
int a[100005]; //给定序列
int c[100005]; //树状数组维护区间最值
int lowbit(int x)
{
return x & -x;
}
int update(int x , int y)
{
a[x] = y; //更新原序列对应位置的值
while(x <= n) //枚举受到影响的c[x]
{
c[x] = y; //更新当前c[x]
for(int i = 1 ; i < lowbit(x) ; i <<= 1) //(树状数组图)更新直连儿子的值,理解每一个儿子对应为一个分块
c[i] = c[i] > c[x - i] ? c[i] : c[x - i]; //更应对应分块的最值
x += lowbit(x);
}
}
int query(int l , int r)
{
int ans = 0;
while(1)
{
ans = ans > a[r] ? ans : a[r];
if(r == l) break;
for(r -= 1 ; r - l >= lowbit(r) ; r -= lowbit(r)) //降低复杂度的枚举,枚举分块,直到包含l,r的所有值
ans = ans > c[r] ? ans : c[r];
}
return ans;
}
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(0);
}