P2866 [USACO06NOV] Bad Hair Day S

原题链接

题解

1.倒序求
2.求每个点有多少高度比自己
3.高度函数图像是有升有降的,由于要求比自己小的,在求完之后,我们把所有点前比自己小的点缩起来放到自己身上,然后把那些点删掉,再插入自己
这样序列就变成了降序,遍历的时候也只需要遍历那些降序点

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct node
{
    ll index,hide;
};
ll h[80008];
int main()
{
    ll n;
    cin>>n;
    for(ll i=1;i<=n;i++)
    {
        cin>>h[i];
    }

    stack<node> q;
    ll ans=0;
    for(ll i=n;i>=1;i--)
    {
        ll cnt=0;
        while(q.size()&&h[q.top().index]<h[i])
        {
            cnt+=q.top().hide+1;
            q.pop();
        }
        ans+=cnt;
        q.push({i,cnt});
    }

    cout<<ans;
    return 0;
}

posted @   纯粹的  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示