题解
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;
}
标签:index,点前,ll,long,Hair,Bad,USACO06NOV,降序
From: https://www.cnblogs.com/pure4knowledge/p/18064199