#include<bits/stdc++.h>
typedef long long ll;
#define pii pair<ll, ll>
#define fi first
#define se second
#define endl '\n'
#define TASK ""
#define N 1000006
#define LOG 17
using namespace std;
const ll inf = 1e9;
bool ghuy4g;
ll getbit(ll mask, ll i) {
return (mask >> i) & 1;
}
ll onbit(ll mask, ll i) {
return mask | (1 << i);
}
ll n;
pii a[N];
ll max_x[N], min_x[N];
ll max_y[N], min_y[N];
ll cnt_x[N], cnt_y[N];
bool check(ll mask) {
for (int i = 1; i <= n; i ++) {
max_x[a[i].fi] = -inf;
min_x[a[i].fi] = inf;
max_y[a[i].se] = -inf;
min_y[a[i].se] = inf;
cnt_x[a[i].fi] = 0;
cnt_y[a[i].se] = 0;
if (cnt_x[a[i].fi] > 2 || cnt_y[a[i].se] > 2) return 0;
}
for (int i = 1; i <= n; i ++) {
if (getbit(mask, i - 1) == 1) {
max_x[a[i].fi] = max(max_x[a[i].fi], a[i].se);
min_x[a[i].fi] = min(min_x[a[i].fi], a[i].se);
max_y[a[i].se] = max(max_y[a[i].se], a[i].fi);
min_y[a[i].se] = min(min_y[a[i].se], a[i].fi);
cnt_x[a[i].fi] ++ ;
cnt_y[a[i].se] ++ ;
if (cnt_x[a[i].fi] > 2 || cnt_y[a[i].se] > 2) return 0;
}
}
for (int i = 1; i <= n; i ++) {
if (getbit(mask, i - 1) == 0) {
if (min_x[a[i].fi] < a[i].se && a[i].se < max_x[a[i].fi]) {
continue;
}
if (min_y[a[i].se] < a[i].fi && a[i].fi < max_y[a[i].se]) {
continue;
}
return 0;
}
}
return 1;
}
void sub1() {
for (int mask = 0; mask < (1 << n); mask ++) {
if (check(mask)) {
for (int i = 0; i < n; i ++) {
cout << getbit(mask, i);
}
return;
}
}
}
vector<ll> vty[N]; // cac vty[i]: a[id] co cung a[id].se == i
bool cmp(ll u, ll v) {
return a[u].fi < a[v].fi;
}
bool is[N];
void sub2() {
ll mx = 0;
for (int i = 1; i <= n; i ++) {
vty[a[i].se].push_back(i);
mx = max(mx, a[i].se);
}
for (int i = 1; i <= mx; i ++) {
if (vty[i].size() == 0) continue;
sort(vty[i].begin(), vty[i].end(), cmp);
is[vty[i][0]] = 1;
is[vty[i].back()] = 1;
}
for (int i = 1; i <= n; i ++) {
cout << is[i];
}
cout << endl;
}
bool klinh;
signed main() {
//freopen("slamp.inp", "r", stdin);
//freopen("slamp.out", "w", stdout);
//srand(time(0));
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> a[i].fi >> a[i].se;
}
if (n <= 16) {
sub1();
}
else {
sub2();
}
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
cerr << fabs(&klinh - &ghuy4g) / 1048576.0;
}
| # | 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... |