HDU 1506 Largest Rectangle in a Histogram(DP)
也是很久以前做过的题了,TLE了5次,和前几天做的POJ那个上的题差不多,开两个标记数组,分别记录左右第一个比他小的位置。
1 #include <stdio.h> 2 #include <string.h> 3 #define N 100001 4 __int64 p[N],right[N],left[N]; 5 int main() 6 { 7 int i,n,j; 8 __int64 max; 9 while(scanf("%d",&n)!=EOF) 10 { 11 if(!n) break; 12 max = 0; 13 for(i = 1;i <= n;i ++) 14 scanf("%I64d",&p[i]); 15 for(i = n;i >= 1;i --) 16 { 17 for(j = i+1;j <= n&&p[j] >= p[i];j = right[j]) 18 ; 19 right[i] = j; 20 } 21 for(i = 1;i <= n;i ++) 22 { 23 for(j = i-1;j >=1&&p[j] >= p[i];j = left[j]) 24 ; 25 left[i] = j; 26 } 27 for(i = 1;i <= n;i ++) 28 { 29 if(max < (right[i]-left[i]-1)*p[i]) 30 max = (right[i]-left[i]-1)*p[i]; 31 } 32 printf("%I64d\n",max); 33 } 34 return 0; 35 }

浙公网安备 33010602011771号