/// - Art -
#include <bits/stdc++.h>
#define el cout << '\n'
#define MASK(x) (1 << (x))
#define BIT(i, x) ((x) >> (i) & 1)
#define corved(x) ((BIT(0, x) && BIT(1, x)) || (BIT(2, x) && BIT(3, x)))
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; ++i)
#define REV(i, b, a) for (int i = (b), _a = (a); i >= _a; --i)
#define REP(i, c) for (int i = 0, _c = (c); i < _c; ++i)
const int N = 1e6 + 7;
using namespace std;
int n;
pair<int, int> p[N];
set<pair<int, int>> row[N], col[N];
bool ans[N];
int pos[N];
void dfs(int idx, int val) {
auto [x, y] = p[idx];
if (pos[idx] == 0) {
col[y].emplace(x, idx);
}
ans[idx] = 1;
pos[idx] |= val;
if ((int)col[y].size() < 3) {
return;
}
int ridx = next(col[y].begin())->second;
auto [rx, ry] = p[ridx];
col[ry].erase({rx, ridx});
if (pos[ridx] == 1) {
auto it = row[rx].lower_bound({ry, ridx});
it = row[rx].erase(it);
dfs(it->second, 1);
}
else if (pos[ridx] == 2) {
auto it = row[rx].lower_bound({ry, ridx});
it = prev(row[rx].erase(it));
dfs(it->second, 2);
}
else {
row[rx].erase({ry, ridx});
}
ans[ridx] = pos[ridx] = 0;
}
int main() {
#define name "slamp"
if (fopen(name".inp", "r")) {
freopen(name".inp", "r", stdin);
freopen(name".out", "w", stdout);
}
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n;
FOR (i, 1, n) {
int x, y;
cin >> x >> y;
p[i] = make_pair(x, y);
row[x].emplace(y, i);
}
FOR (i, 1, 1e6) if (!row[i].empty()) {
dfs(row[i].begin()->second, 1);
dfs(prev(row[i].end())->second, 2);
}
FOR (i, 1, n) {
cout << ans[i];
} el;
return 0;
}
/*
9
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
*/
/*
8
1 5
3 5
6 7
6 5
6 1
3 7
6 3
5 5
*/
컴파일 시 표준 에러 (stderr) 메시지
Main.cpp: In function 'int main()':
Main.cpp:60:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
60 | freopen(name".inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:61:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
61 | freopen(name".out", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |