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 |
---|---|---|---|---|---|---|---|
#1015 | #655905 | #21672. 【NOIP Round #1】冲塔 | czr2012 | yinxiangbo2027 | Failed. | 2024-10-19 11:35:23 | 2024-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)
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;
}