HDU 5696
暴力 莫名的东西
#include<stdio.h> #include<algorithm> #include<stdlib.h> #include<cstring> #include<string> #include<cmath> #include<vector> #include<queue> #include<map> using namespace std; #define ll __int64 #define MAXN 100010 #define inf 1000000000 ll z[MAXN]; ll dp[MAXN]; int main() { int n; while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) scanf("%I64d",&z[i]); memset(dp,-1,sizeof(dp)); for(int i=1;i<=n;i++) { int l,r; l=r=i; ll Min=z[i]; dp[1]=max(dp[1],z[i]*z[i]); while(1) { if(l==1&&r==n) break; if(l!=1&&(r==n||z[l-1]>z[r+1])) Min=min(Min,z[--l]); else Min=min(Min,z[++r]); dp[r-l+1]=max(z[i]*Min,dp[r-l+1]); if(z[l-1]>z[i]||z[r+1]>z[i]) break; } } for(int i=1;i<=n;i++) printf("%I64d\n",dp[i]); } return 0; }
时间: 2024-10-12 17:32:51