贪心(单调队列)——[Usaco2006 Nov]Bad Hair Day

感觉这种从左向右统计的题目都可以用到栈来优化
单调栈,从左向右扫
ps:STL里的栈是比较快的,自己是、手写的栈效率跟它差不多啊。。。
View Code
#include<stdio.h>
#include
<iostream>
#include
<stack>
using namespace std;
int a[80009];

int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=0;i<n;i++)
scanf(
"%d",&a[i]);

stack
<int>ss;
long long all=0;
ss.push(a[
0]);
for(i=1;i<n;i++)
{
if(a[i]<ss.top())
{
all
+=ss.size();
ss.push(a[i]);
}
else
{
while(ss.top()<=a[i])
{
ss.pop();
if(ss.empty())
break;
}
all
+=ss.size();
ss.push(a[i]);
}
}

printf(
"%lld\n",all);
}
}

  

你可能感兴趣的:(USACO)