普通存最大值,最小值
int a[maxn];
ll Max[MAXN][21];
ll Query(int l,int r)
{
int k=log2(r-l+1);
return max(Max[l][k],Max[r-(1<<k)+1][k]);
}
int main()
{
for(int i=1;i<=N;i++) cin >> a[i],Max[i][0] = s[i];
for(int j=1;j<=21;j++)
for(int i=1;i+(1<<j)-1<=N;i++)
Max[i][j]=max(Max[i][j-1],Max[i+(1<<(j-1))][j-1]);
}
存坐标
int a[maxn];
int Max[MAXN][21];
int MAX(int i,int j)
{
return a[i]>=a[j] ? i:j;
}
int Query(int l,int r)
{
int k=log2(r-l+1);
return MAX(Max[l][k],Max[r-(1<<k)+1][k]);
}
int main()
{
for(int i=1;i<=N;i++) Max[i][0] = i;
for(int j=1;j<=21;j++)
for(int i=1;i+(1<<j)-1<=N;i++)
Max[i][j]=MAX(Max[i][j-1],Max[i+(1<<(j-1))][j-1]);
}