#include "insects.h"
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define fi first
#define se second
#define lf ((id<<1))
#define rg ((id<<1)|1)
#define md ((l+r)>>1)
using namespace std;
const int MAXN = 3e5+10;
const ll MOD = 1e9+2022;
ll sum(ll a, ll b){ return (a+b)%MOD;}
void chsum(ll &a, ll b){ a = (a+b)%MOD;}
ll mul(ll a, ll b){ return (a*b)%MOD; }
void chmul(ll &a, ll b){ a = (a*b)%MOD;}
void chmn(auto &a, auto b){ a = min(a, b); }
void chmx(auto &a, auto b){ a = max(a, b); }
int n, ANS;
int ty[MAXN];
vector <int> all, dif; // yg gk di dalem vec
vector<int>vec; 
bool le = 0;
bool cek(int x){
	if(le == 0){
		for(int i=0; i<all.size(); i++){ // kalo ke kanan ambil ygdi luar
			int v = all[i];
			move_inside(v);
			if(press_button() == x+1){
				move_outside(v);
			} else vec.pb(v); // vec < all
		}
		all.clear();
		for(int i=0; i<n; i++) ty[i] = 0;
		for(auto in : vec) ty[in] = 1;
		for(int i=0; i<n; i++){
			if(ty[i]) continue;
			all.pb(i);
		}
	} else {
		for(auto in : vec) move_outside(in);
		vector<int> vec2;
		for(int i=0; i<vec.size(); i++){ // kalo ke kanan ambil ygdi luar
			int v = vec[i];
			move_inside(v);
			if(press_button() == x+1){
				move_outside(v);
			} else vec2.pb(v); // vec < all
		}
		swap(vec2, vec); // vec < vec2
		for(int i=0; i<n; i++) ty[i] = 0;
		for(auto in : vec2) ty[in] = 1;
		for(auto in : vec) ty[in] = 2;
		all.clear();
		for(int i=0; i<n; i++){
			if(ty[i]==1) // vec2 yg ga ada di vec
				all.pb(i);
		}
	}
	if(dif.size() * x == vec.size()) return 1; // waduh tot * x
	return 0;
}
int min_cardinality(int N) {
	n = N; ANS = n;
	for(int i=0; i<n; i++){
		move_inside(i);
		if(press_button() == 1){
			dif.pb(i);
		}
		else move_outside(i);
	}
	for(auto in : dif) move_outside(in);
	for(int i=0; i<n; i++) all.pb(i);
	int l=2, r=n, mid=0, cnt=1;
	while(l<=r){
		mid = (l+r)>>1;
		if(cek(mid)){
			le = 0;
			cnt = mid, l = mid+1;
		} else {
			le = 1; r = mid-1;
		}
	}
	return cnt;
	// for(int i=0; i<n; i++) vec.pb(i);
	// while(!vec.empty()){
	// 	for(auto in : vec) move_inside(in);
	// 	int mx = press_button();
	// 	chmn(ANS, mx);
	// 	for(auto in : vec) move_outside(in);
	// 	for(int i=0; i<n; i++) ty[i] = 0;
	// 	vector<int> idx;
	// 	for(auto in : vec){
	// 		if(ty[in]) continue;
	// 		move_outside(in);
	// 	}
	// 	for(auto in : idx) move_inside(in); // penting aj
	// 	for(auto in : vec){
	// 		if(ty[in]) continue;
	// 		move_inside(in);
	// 		if(press_button() == 2) ty[in] = 1; // max
	// 		move_outside(in);
	// 	}
	// 	vector<int> vec2;
	// 	for(auto in : vec){
	// 		if(ty[in]) continue;
	// 		vec2.pb(in);
	// 	}
	// 	swap(vec, vec2);
	// }
	// return ANS;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |