1413D. Shurikens(貪心,棧)

issue敲膩害發表於2020-11-28

傳送門

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

按照棧式匹配

上一次拿出去了 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] << " ";
	}
}

相關文章