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 }

你可能感兴趣的:(AIR)