POJ3250(Bad Hair Day)

题目链接

单调队列练习题。

题目大意:n个牛排成一列向右看,牛i能看到牛j的头顶,当且仅当牛j在牛i的右边并且牛i与牛j之间的所有牛均比牛i矮。设牛i能看到的牛数为Ci,求∑Ci

View Code
 1 #include <stdio.h>

 2 #define N 8000001

 3 #define INF 0x7fffffff

 4 int a[N];

 5 int q[N],front,rear;

 6 int main()

 7 {

 8     int i,n;

 9     long long ans;

10     while(~scanf("%d",&n))

11     {

12         for(i=0;i<n;i++)    scanf("%d",&a[i]);

13         a[n]=INF;

14         front=rear=0;

15         ans=0;

16         for(i=0;i<=n;i++)

17         {

18             while(front<rear&&a[q[rear-1]]<=a[i])

19             {

20                 ans+=i-q[rear-1]-1;

21                 rear--;

22             }

23             q[rear++]=i;

24         }

25         printf("%lld\n",ans);

26     }

27     return 0;

28 }

 

你可能感兴趣的:(AIR)