#include<bits/stdc++.h>
#define ll long long
#define se second
#define fi first
#define all(v) v.begin(), v.end()
using namespace std;
const int N = 1e5 + 1;
const ll inf = 1e18;
const ll mod = 1e9 + 7;
#define taskname "SLAMP"
void inp(){
if(fopen(taskname".inp", "r")){
freopen(taskname".inp", "r", stdin);
freopen(taskname".out", "w", stdout);
}
}
vector<pair<int, int>> v;
vector<int> idr, idc;
int n;
int get_pos(int val, vector<int> &v){
return lower_bound(all(v), val) - v.begin();
}
namespace sub12{
bool check(int mask){
vector<vector<int>> r(idr.size()), c(idc.size());
for(int i = 0; i < n; ++i){
if(((mask >> i) & 1) == 0) continue;
int pr = get_pos(v[i].fi, idr);
int pc = get_pos(v[i].se, idc);
r[pr].push_back(v[i].se);
if(r[pr].size() == 2){
if(r[pr][0] > r[pr][1]) swap(r[pr][0], r[pr][1]);
}
c[pc].push_back(v[i].fi);
if(c[pc].size() == 2){
if(c[pc][0] > c[pc][1]) swap(c[pc][0], c[pc][1]);
}
if(r[pr].size() > 2 || c[pc].size() > 2) return false;
}
// cout << "r" << '\n';
// for(int i = 0; i < idr.size(); ++i){
// cout << idr[i] << ": ";
// for(int it : r[i]) cout << it << ' ';
// cout << '\n';
// }
// cout << "c" << '\n';
// for(int i = 0; i < idc.size(); ++i){
// cout << idc[i] << ": ";
// for(int it : c[i]) cout << it << ' ';
// cout << '\n';
// }
//
// cout << '\n';
for(int i = 0; i < n; ++i){
if((mask >> i) & 1) continue;
int pr = get_pos(v[i].fi, idr);
int pc = get_pos(v[i].se, idc);
if(r[pr].size() == 2){
if(r[pr][0] < v[i].se && r[pr][1] > v[i].se) continue;
}
if(c[pc].size() == 2){
if(c[pc][0] < v[i].fi && c[pc][1] > v[i].fi) continue;
}
return false;
}
return true;
}
void solve(){
for(int mask = 1; mask < (1 << n); ++mask){
if(check(mask)){
for(int i = 0; i < n; ++i)
cout << ((mask >> i) & 1);
return;
}
}
}
}
namespace sub3{
int ans[N];
void solve(){
vector<vector<pair<int, int>>> c(idc.size());
for(int i = 0; i < n; ++i){
auto it = v[i];
int pc = get_pos(it.se, idc);
c[pc].push_back({it.fi, i});
ans[i] = 1;
}
for(int i = 0; i < idc.size(); ++i){
sort(all(c[i]));
for(int j = 1; j < c[i].size() - 1; ++j)
ans[c[i][j].se] = 0;
}
for(int i = 0; i < n; ++i) cout << ans[i];
}
}
//namespace sub4{
// bool vis[N];
// void solve(){
// vector<vector<int>> r(idr.size()), c(idc.size());
//
// bool ok = true;
// while(ok){
// vector<vector<int>> r1(idr.size()), c1(idc.size());
//
// ok = false;
// for(int i = 1; i <= n; ++i){
// if(vis[i]) continue;
// ok = true;
//
// int pr = get_pos(v[i].fi, idr);
// int pc = get_pos(v[i].se, idc);
//
// r1[pr].push_back(v[i].se);
// c1[pc].push_back(v[i].fi);
// }
//
// for(int i = 1; i <= n; ++i){
// if(vis[i]) continue;
//
// int pr = get_pos(v[i].fi, idr);
// int pc = get_pos(v[i].se, idc);
//
// if(r1[pr][0] == )
// }
// }
// }
//}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
inp();
cin >> n;
v.resize(n);
for(auto &it : v){
cin >> it.fi >> it.se;
idr.push_back(it.fi);
idc.push_back(it.se);
}
bool ok = (n % 2 == 0);
sort(all(idr));
sort(all(idc));
idr.erase(unique(all(idr)), idr.end());
idc.erase(unique(all(idc)), idc.end());
if(n <= 20) sub12::solve();
else if(ok) sub3::solve();
return 0;
}
Compilation message (stderr)
Main.cpp: In function 'void inp()':
Main.cpp:16:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
16 | freopen(taskname".inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:17:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
17 | freopen(taskname".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... |