1 #include<iostream>
2 #include<cstdio>
3 #include<stack>
4 #include<cctype>
5 using namespace std;
6 inline void read(int &tmp)
7 {
8 int x=1;char c=getchar();
9 for(tmp=0;!isdigit(c);c=getchar()) if(c=='-') x=-1;
10 for(;isdigit(c);tmp=tmp*10+c-48,c=getchar());
11 tmp*=x;
12 }
13 typedef pair<int,int> PAIR;//first--高 second--宽
14 stack<PAIR> q;
15 int n;
16 int main()
17 {
18 read(n);
19 while(n)
20 {
21 long long ans=0;//不开long long见祖宗
22 for(int i=1,tmp;i<=n+1;i++)
23 {
24 if(i<=n) read(tmp);
25 else tmp=0;//避免栈内有剩余矩形
26 if(q.empty()||tmp>q.top().first)//维护单调递增栈
27 {q.push(make_pair(tmp,1));continue;}
28 int tot=0;
29 while(!q.empty()&&tmp<q.top().first)
30 {
31 tot+=q.top().second;
32 ans=max(ans,(long long)q.top().first*tot);
33 q.pop();
34 }
35 q.push(make_pair(tmp,tot+1));//该矩形前已考虑过,直接把高度为当前矩形高度、宽度为累计宽度+当前宽度(1)的矩形入栈
36 }
37 printf("%lld\n",ans);
38 read(n);
39 }
40 return 0;
41 }