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 }
posted @ 2012-07-18 21:09  Naix_x  阅读(135)  评论(0编辑  收藏  举报