关于刚才的1B
  • 板块学术版
  • 楼主_5011_
  • 当前回复6
  • 已保存回复6
  • 发布时间2020/10/25 21:06
  • 上次更新2023/11/5 09:52:32
查看原帖
关于刚才的1B
91127
_5011_楼主2020/10/25 21:06
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <stack>
#include <set>
using namespace std;

#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[1 << 21], *p1 = buf, *p2 = buf;

inline int qread() {
	register char c = getchar();
	register int x = 0, f = 1;
	while (c < '0' || c > '9') {
		if (c == '-') f = -1;
		c = getchar();
	}
	while (c >= '0' && c <= '9') {
		x = (x << 3) + (x << 1) + c - 48;
		c = getchar();
	}
	return x * f;
}

inline int Abs(const int& x) {return (x > 0 ? x : -x);}
inline int Max(const int& x, const int& y) {return (x > y ? x : y);}
inline int Min(const int& x, const int& y) {return (x < y ? x : y);}

stack <pair <int, int> > stk;
set <int> st;
int n, ans[100005], anstop;
bool book[100005];

inline char readchar() {
	char c = getchar();
	while (c != '+' && c != '-') c = getchar();
	return c;
}

inline void Solve() {
	n = qread();
	for (register int i = 1;i <= n;i++) st.insert(i);
	for (register int i = 1;i <= (n << 1);i++) {
		char opt = readchar();
		if (opt == '+') {
			int x = *(--st.end());
			st.erase(x);
			ans[++anstop] = x;
			//printf("%d %d\n", anstop, x);
			stk.push(make_pair(x, anstop));
		} else {
			register int p = qread();
			if (stk.empty() || stk.top().first < p) {
				puts("NO");
				return;
			}
			pair <int, int> cur = stk.top();
			stk.pop();
			st.insert(ans[cur.second]);
			ans[cur.second] = p;
			st.erase(p);
		}
	}
	puts("YES");
	for (register int i = 1;i <= n;i++) printf("%d ", ans[i]);
}

int main() {
	Solve();
	#ifndef ONLINE_JUDGE
	while (1);
	#endif
	return 0;
}

WA on pretest 10,求助

2020/10/25 21:06
加载中...