28 lines
543 B
C++
28 lines
543 B
C++
#include<bits/stdc++.h>
|
|
using namespace std;
|
|
|
|
const int MAX_N = 3e5+5;
|
|
const int MAX_K = 19;
|
|
int sMin[MAX_N][MAX_K];
|
|
int sMax[MAX_N][MAX_K];
|
|
int l[MAX_N];
|
|
|
|
|
|
int main(){
|
|
cin.sync_with_stdio(false);
|
|
cin.tie(0);
|
|
l[1]=0;
|
|
int n;
|
|
cin>>n;
|
|
for(int i=1;i<=n;i++){
|
|
cin>>sMin[i][0];
|
|
sMax[i][0]=sMin[i][0];
|
|
if(i!=1)l[i]=l[(i>>1)]+1;
|
|
}
|
|
int k=l[n]+1;
|
|
for(int j=1;j<=k;j++){
|
|
for(int i=1;i+(1<<j)-1<=n;i++){
|
|
sMax[i][j]=max(sMax[i][j-1],sMax[i+(1<<(j-1))][j-1]);
|
|
}
|
|
}
|
|
} |