#include //#include #define nl cout<<"\n" #define sz(x) (int)((x).size()) #define len(x) (x).length() #define all(a) (a).begin(),(a).end() #define rep(i,n) for( int i=0;i<(int)(n);i++) #define brep(i,n) for( int i=(n);i>=0;i-- ) #define repp(i,a,b) for( int i = (a); i < (b); i++ ) #define ll long long int #define pb push_back #define mp make_pair #define F first #define S second #define vi vector #define vll vector #define pii pair #define vpii vector > #define bits __builtin_popcountll #define mod 1000000007 #define test int tes; cin >> tes; while( tes-- > 0 ) #define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define pv(x) cout<< #x<< " = "<<(x)<<"\n"; #define foreach(i,t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++) using namespace std; ll x,y,n,m,t,k,p,q; vi a; vi b; class seg_tree { int n; vi a,st,lazy; int left(int i) { return i<<1; } int right(int i){ return (i<<1)+1;} void build(int p,int l,int r) { if(l==r) st[p]=a[l]; else { build ( left(p) , l , (l+r)/2 ); build ( right(p) , ((l+r)/2)+1 , r ); st[p] = max(st[left(p)],st[right(p)]); //function } } int rmq(int p, int l, int r, int i, int j) { if (i > r || j < l) return -1; if (i <= l && j >= r) return st[p]; int p1 = rmq(left(p) , l , (l+r) / 2 , i, j); int p2 = rmq(right(p), (l+r)/2 + 1 , r , i, j); return max(p1,p2); } public: seg_tree(vi &b) { a=b; n=a.size(); st.assign(4*n,0); lazy.assign(4*n,0); build(1,0,n-1); } int rmq(int i,int j){return rmq(1,0,n-1,i,j);} }; int main() { // freopen("ip.txt", "r", stdin); // freopen("op.txt", "w", stdout); fast cin>>n; a.assign(n,0); rep(i,n)cin>>a[i]; seg_tree T(a); rep(k,n) rep(i,n-k) b.pb(T.rmq(i,i+k)); // rep(i,sz(b)) // cout<