#include #define MAX 200007 #define MOD 1000000007 using namespace std; int N, ST[MAX * 2]; int build(int low, int high, int index, vector &data){ if(low == high){ ST[index] = data[low]; return ST[index]; } int mid = (low+high) /2; ST[index] = max(build(low, mid, (index * 2) + 1, data), build(mid + 1, high, (index *2) + 2, data)); return ST[index]; } int query(int index, int low, int high, int l, int r){ if(l<=low && r >=high) return ST[index]; if(high < l || low > r) return -1; int mid = (low + high) / 2; int lsum = query((2 * index) + 1, low, mid, l, r); int rsum = query((2 * index) + 2, mid + 1, high, l, r); return max(lsum, rsum); } int find(int l, int r){ return query(0, 0, N -1, l, r); } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int temp; long ans = 0; cin>>N, temp; vector initial, second; //final; for(int i = 0; i < N; i++){ cin>>temp; initial.push_back(temp); } build(0, N-1, 0, initial); for(int k = 0; k < N; k++){ for(int i = 0; i < N - k; i++){ int j = i + k; second.push_back(find(i,j)); } } //for(int i: second) cout<