QOJ.ac
QOJ
The 2nd Universal Cup Finals is coming! Check out our event page, schedule, and competition rules!
ID | Submission ID | Problem | Hacker | Owner | Result | Submit time | Judge time |
---|---|---|---|---|---|---|---|
#1014 | #655905 | #21672. 【NOIP Round #1】冲塔 | yinxiangbo2027 | yinxiangbo2027 | Failed. | 2024-10-19 10:34:21 | 2024-10-19 10:34:21 |
Details
Extra Test:
Invalid Input
input:
112445
output:
result:
FAIL Unexpected end of file - token expected (stdin, line 2)
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#655905 | #21672. 【NOIP Round #1】冲塔 | yinxiangbo2027 | 100 ✓ | 375ms | 114024kb | C++20 | 1.3kb | 2024-10-19 10:16:33 | 2024-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;
}