QOJ.ac

QOJ

IDSubmission IDProblemHackerOwnerResultSubmit timeJudge time
#1015#655905#21672. 【NOIP Round #1】冲塔czr2012yinxiangbo2027Failed.2024-10-19 11:35:232024-10-19 11:35:24

Details

Extra Test:

Invalid Input

input:

1000000
257071 5210114
1406040 9456851
3118174 4761356
7073360 7299841
4958391 8127395
4733637 319983
2174827 8346494
7722759 8129181
9271292 6614061
7024607 2054389
7641466 1078105
1754427 6975215
9609307 5865133
2701388 6212254
6887088 5711396
1703390 6159347
4649771 4881874
3935597 280060
6960498...

output:


result:

FAIL Integer 5210114 violates the range [1, 1000000] (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;
}