[Submit] [Go Back] [Status] [Discuss]
Home Page
Go Back
To top
/* ID: xinming2 PROG: stall4 LANG: C++ */ #include <cstdio> #include <cmath> #include <algorithm> #include <iostream> #include <cstring> #include <map> #include <string> #include <stack> #include <cctype> #include <vector> #include <queue> #include <set> #include <utility> #include <cassert> using namespace std; ///#define Online_Judge #define outstars cout << "***********************" << endl; #define clr(a,b) memset(a,b,sizeof(a)) #define lson l , mid , rt << 1 #define rson mid + 1 , r , rt << 1 | 1 #define mk make_pair #define FOR(i , x , n) for(int i = (x) ; i < (n) ; i++) #define FORR(i , x , n) for(int i = (x) ; i <= (n) ; i++) #define REP(i , x , n) for(int i = (x) ; i > (n) ; i--) #define REPP(i ,x , n) for(int i = (x) ; i >= (n) ; i--) const int MAXN = 100000 + 50; const int sigma_size = 26; const long long LLMAX = 0x7fffffffffffffffLL; const long long LLMIN = 0x8000000000000000LL; const int INF = 0x7fffffff; const int IMIN = 0x80000000; #define eps 1e-8 const int mod = (int)1e9 + 7; typedef long long LL; const LL MOD = 1000000007LL; const double PI = acos(-1.0); typedef pair<int , int> pi; #define Bug(s) cout << "s = " << s << endl; ///#pragma comment(linker, "/STACK:102400000,102400000") int L[MAXN] , R[MAXN] , a[MAXN]; int s[MAXN]; int n; void solve() { int t = 0; for(int i = 0 ; i < n ; i++) { while(t > 0 && a[s[t - 1]] >= a[i])t--; L[i] = t == 0 ? 0 : (s[t - 1] + 1); s[t++] = i; } t = 0; for(int i = n - 1 ; i >= 0 ; i--) { while(t > 0 && a[s[t - 1]] >= a[i])t--; R[i] = t == 0 ? n : s[t - 1]; s[t++] = i; } LL ans = 0; for(int i = 0 ; i < n; i++) { ans = max(ans , (LL)a[i] * (R[i] - L[i])); } printf("%lld\n" , ans); } int main() { while(scanf("%d", &n) , n) { clr(s , 0);clr(L ,0);clr(R , 0); for(int i = 0; i < n ; i++)scanf("%d" , &a[i]); solve(); } return 0; }