POJ 3250 Bad Hair Day(DP)
竟然错了10+,静不下心来啊。
开个标记数组记录,记录比第一个比它大的位置。
1 #include <stdio.h> 2 #include <string.h> 3 #define N 80001 4 unsigned __int64 p[N],left[N],sum; 5 int main() 6 { 7 int n,i,j; 8 scanf("%d",&n); 9 for(i = 1;i <= n;i ++) 10 scanf("%I64d",&p[i]); 11 sum = 0; 12 for(i = n;i >= 1;i --) 13 { 14 for(j = i+1;j <= n&&p[j]<p[i];j=left[j]); 15 left[i] = j; 16 sum += j-i-1; 17 } 18 printf("%I64d\n",sum); 19 return 0; 20 }