Submission #1302444

#TimeUsernameProblemLanguageResultExecution timeMemory
1302444g4yuhgTowers (NOI22_towers)C++20
22 / 100
304 ms62676 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...