1413D. Shurikens(贪心,栈)

传送门

当取出一个元素 x x x,说明剩余的元素都是大于等于 x x x的物品

而且,最近一次加入的物品的限制条件最弱(也就是可以相对其他物品尽量小)

就是每次取出的元素,如果把它放在最近一次放入物品的位置

按照栈式匹配

上一次拿出去了 x x x

那么栈内所有元素的值都应该大于 x x x

这就是一个递减的序列,就可以满足要求

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5+10;
int n,a[maxn],ans[maxn];
int stac[maxn],top,num,flag = 1;
int wt[maxn],laz[maxn];
int main()
{
	cin >> n;
	int minn = -1e9;
	for(int i=1;i<=2*n;i++)
	{
		char s; cin >> s;
		if( s=='+' )//新加入的元素 
			stac[++top] = ++num;
		else//取出元素 
		{
			int x; cin >> x;
			if( x<ans[stac[top]+1]||top==0 )	flag = 0;
			ans[stac[top--]]=x;
		}
	}
	if( flag==0 )	cout << "NO";
	else
	{
		cout << "YES\n";
		for(int i=1;i<=n;i++)
			cout << ans[i] << " ";
	}
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页