POJ 3250 Bad Hair Day - 單調隊列

題目描述

分析:

題目大意是求出每隻cow能看到的cow的總數的和
轉換爲:
每隻cow能被看到的次數總和
這樣就可以用單調隊列求解了。
對於每隻cow,刪掉隊列中height小於它的值,ans加上此時隊列的長度(就是這隻cow會被看到的次數)。再插入這隻cow的height。如此求解。
注意:ans要用long long (畢竟80000*80000 > INT_MAX)

#include<cstdio>
#define MAXN 80000

int n,h[MAXN+10],que[MAXN+10];
long long ans;

void read()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&h[i]);
}
void workout()
{
    int front=0,rear=0;
    for(int i=1;i<=n;i++){
        while(front<rear){
            if(que[rear-1]<=h[i])
                rear--;
            else
                break;
        }
        ans+=rear-front;
        que[rear++]=h[i];
    }
    printf("%I64d\n",ans);
}
int main()
{
    read();
    workout();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章