简化思维,避免模拟
程序员文章站
2022-04-07 19:09:30
...
解法:逆向思维,抓住本质,原理在代码注释里。
#include<bits/stdc++.h>
using namespace std;
int a[500005];
int main(){
long n;
memset(a,0,sizeof(a));
scanf("%d\n",&n);
for(long i=1;i<=n;i++) scanf("%d",&a[i]);
long maxx=0;
for(long i=1;i<=n;i++){
//每个数都可能是最小值,那么在此数为最小值得情况下,向左右两侧最大化扩展子序列即可
long sum=a[i],min=a[i],left=i-1,right=i+1;
while(left>=1 && a[left]>=min){//向左扩展
sum+=a[left];
left--;
}
while(right<=n && a[right]>=min){//向右扩展
sum+=a[right];
right++;
}
maxx=max(maxx,a[i]*sum);
}
printf("%d\n",maxx);
}
上一篇: jsp—EL表达式
推荐阅读
-
AtCoder Beginner Contest 173(E 思维模拟 F 容斥 思维题 )
-
Moving stones---------------------------思维(模拟+优先队列)
-
codeforces 1375D 模拟+思维
-
牛客国庆集训day6 B Board (模拟标记思维或找规律或分块???)
-
用EXCEL VBA编写模拟器可以避免误操作导致的数据刷新
-
模拟战役---------------------------思维(dfs+连通块)
-
java8使用Optional来避免空指针异常(简化代码)
-
B. Two Arrays(模拟+思维)Codeforces Round #673 (Div. 2)
-
CodeForces - 1256B Minimize the Permutation(思维模拟)
-
AtCoder Beginner Contest 173(E 思维模拟 F 容斥 思维题 )