[POJ3250]头发糟糕的日子

点击打开链接   

单调栈/队列

考虑每一头牛会被多少其他牛看到

暴力n^2

这样维护一个单调下降的序列 每次加入新元素时弹出元素

最后每次加一个栈顶的最大编号-1

然后统计答案就没了

n^2

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int hei[80008];
int n;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&hei[i]);
	}
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			if(hei[j]
on

#include
#include
#include
#include
#include
#include
#include
using namespace std;
int hei[80008];
int n;
long long ans=0;
int stack[80008];
int top=0;
inline int init()
{
	int now=0;char c;bool flag=false;
	while(1)
	{
		c=getchar();
		if(c>='0'&&c<='9')
		{
			now=now*10+c-'0';
			flag=true;
		}
		else if(flag)return now;
	}
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&hei[i]);
	}
	for(int i=1;i<=n;i++)
	{
		while(top>=1&&hei[i]>=stack[top])top--;
		stack[++top]=hei[i];
		ans+=top-1;
	}
	cout<
这里留一个坑 还剩四道题


你可能感兴趣的:(USACO,数据结构)