您的位置:首页 > 其它

bzoj1660:乱发节

2015-09-20 19:27 211 查看

一开始就陷入误区了,因为总是想着这头牛能看到几头牛这个点去考虑,然而那样的话基本都会爆的但是又想不出怎么优化,网上的题解。从另一方面考虑就好了,就是这一头牛能被多少头牛看到再加上栈的应用就ok了。

-------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<deque>
#include<stack>
using namespace std;
#define ll long long
const int nmax=80005;
ll n,a[nmax];
stack<ll>q;
int main(){
scanf("%lld",&n);
for(ll i=1;i<=n;i++)
scanf("%lld",&a[i]);
q.push(a[1]);
ll ans=0,cur=1;
for(ll i=2;i<=n;i++){
if(a[i]>=q.top()){
while(!q.empty()&&a[i]>=q.top()){
q.pop();
cur--;
}
q.push(a[i]);
ans+=cur;
cur++;
}
else{
ans+=cur;
q.push(a[i]);
cur++;
}
}
printf("%lld\n",ans);
return 0;
}

-----------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: