hm 与 zx 的故事系列1

Description

想当年 hm 家族还没从大象家族分离出来的时候,zx妹妹还在蚂蚁窝。 话说当年大象踩了蚂蚁窝,成千上万的蚂蚁要与这只大象决战,所谓当时的战斗可想而知多不激烈。 往往世事难料, 蚂蚁想出了一招:把所有蚂蚁排成一队,每个蚂蚁都有一定的功力,然后每个蚂蚁都能从后面最近的比他功力大的 蚂蚁那里得到能量这个时候他能释放的能量就是那头蚂蚁的能量。如果没有相应的蚂蚁释放的能量为0 问最后每头蚂蚁释放的能量为多少?

Input

第一行包含的是 n (1<=n<=1000000) 表示蚂蚁头数 后面n行每行一个数 xi(0<=xi<=10^9) 表示当前队列中第i号蚂蚁的能量。

Output

n行每行一个数表示每只蚂蚁所能释放的能量

Sample Input

5 1 2 3 4 5 5 5 4 3 2 1

Sample Output

2 3 4 5 0 0 0 0 0 0 题解:就是要输出一组序列中比当前最先大的数
 
 
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <stack>
using namespace std;
int a[1000010];
int b[1000010];
int main()
{
	int n,i;
	while (~scanf("%d",&n))
	{
		for (i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
			b[i]=0;
		}
		stack <int>q;
		stack <int>q1;
		q1.push(0);
		q.push(a[0]);
		int t=0;
		for (i=1;i<n;i++)
		{
			int k=q.top();
			if (a[i]>k)
				while (!q.empty() && q.top()<a[i])
				{
					b[q1.top()]=a[i];
					q1.pop();
					q.pop();
				}
			q1.push(i);
			q.push(a[i]);
		}
		for (i=0;i<n;i++)
			printf("%d\n",b[i]);
	} 
	return 0;
}



 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值