QOJ.ac

QOJ

IDSubmission IDProblemHackerOwnerResultSubmit timeJudge time
#1014#655905#21672. 【NOIP Round #1】冲塔yinxiangbo2027yinxiangbo2027Failed.2024-10-19 10:34:212024-10-19 10:34:21

Details

Extra Test:

Invalid Input

input:

112445

output:


result:

FAIL Unexpected end of file - token expected (stdin, line 2)

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#655905#21672. 【NOIP Round #1】冲塔yinxiangbo2027100 ✓375ms114024kbC++201.3kb2024-10-19 10:16:332024-10-19 10:16:34

answer

#include<cstdio>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int o = 1e6 + 10;
int n, x[o], y[o], ans[o], lst[o], nxt[o];
vector<int> X[o], vec[o];
queue<int> q;
inline bool cmp(int A, int B) { return y[A] < y[B]; }
inline void ins(int t, int tp) {
	if (!ans[t]) { vec[y[t]].push_back(t); if (vec[y[t]].size() > 2) q.push(y[t]); }
	ans[t] ^= tp;
}
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; ++i) scanf("%d%d", &x[i], &y[i]), X[x[i]].push_back(i);
	for (int i = 1; i < o; ++i) if (X[i].size()) {
		sort(X[i].begin(), X[i].end(), cmp);        // sort by y
        for (int j = 1, sz = X[i].size(); j < sz; ++j) lst[nxt[X[i][j - 1]] = X[i][j]] = X[i][j - 1];
		ins(X[i][0], 1); ins(X[i][X[i].size() - 1], 2);
	}
	for (;!q.empty(); q.pop()) {
		int i;
		int mn = vec[i = q.front()][0], mx = vec[i][0];
		for (int j = 0, sz = vec[i].size(), k; j < sz; ++j) {
			if (x[k = vec[i][j]] < x[mn]) mn = k;
			if (x[k] > x[mx]) mx = k;
		}
		for (int j = 0, sz = vec[i].size(), k; j < sz; ++j) if ((k = vec[i][j]) - mx && k - mn)
			if (ans[k] == 1) ans[k] = 0, ins(nxt[k], 1);
			else if (ans[k] == 2) ans[k] = 0, ins(lst[k], 2);
			else ans[k] = 0;
		vec[i] = vector<int>(2, mn); vec[i][1] = mx;
	}
	for (int i = 1; i <= n; ++i) putchar(ans[i] ? 49 : 48);
	return 0;
}