标签:stat dff imp str can 面积 int 最大 exti
求最大子矩阵面积(dp)
import java.util.*; public class Main1{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n = sc.nextInt(); int a[]= new int [2*n+1]; for(int i=1;i<=n;i++){ a[i]=sc.nextInt(); } int l[]=new int[10010]; int r[]=new int[10010]; l[1]=1; r[n]=n; for(int i=2;i<=n;i++){ int t = i; //记录a[i]往左比他小的最小边界 while(t>1&&a[i]<=a[t-1]) t= l[t-1]; //这步相当巧妙,直接实现了跳转,如果a[t-1]不小于a[i]的话,我们可以断定a[t-1]的最左边肯定包含a[i]的最左边.直接跳过中间的点
l[i]=t; } for(int i=n-1;i>=1;i--){ int t = i; while(t<n&&a[i]<=a[t+1]) t= r[t+1]; r[i]=t; } int ans=0; // System.out.println("fd"); for(int i=1;i<=n;i++){ // System.out.println("dff"); ans=Math.max(ans,(r[i]-l[i]+1)*a[i]); } System.out.println(ans); } } // }
标签:stat dff imp str can 面积 int 最大 exti
原文地址:https://www.cnblogs.com/ls-pankong/p/10502141.html