Submission #1183692

#TimeUsernameProblemLanguageResultExecution timeMemory
1183692kl0989eThe Collection Game (BOI21_swaps)C++20
100 / 100
2 ms424 KiB
#include "swaps.h"
#include <bits/stdc++.h>
using namespace std;

#pragma GCC optimize("Ofast")

#define ll long long
#define fi first
#define se second
#define pb push_back
#define vi vector<int>
#define vl vector<ll>
#define pi pair<int, int>
#define pl pair<ll,ll>
#define all(x) (x).begin(),(x).end()

vector<pi> ops;

void custom_schedule(int a, int b, int n) {
	ops.pb({a,b});
	if (a<=n && b<=n) {
		schedule(a,b);
	}
}

vi custom_visit(int n) {
	vi t=visit();
	vi ret;
	int pt=0;
	for (int i=0; i<ops.size(); i++) {
		if (ops[i].fi>n || ops[i].se>n) {
			ret.pb((-ops[i].fi) > (-ops[i].se));
		}
		else {
			ret.pb(t[pt++]);
		}
	}
	ops.clear();
	return ret;
}

void solve(int n, int v) {
	int m=n;
	while (__builtin_popcount(m)!=1) {
		m++;
	}
    vi ord(m);
    iota(all(ord),1);
	for (int k=2; k<=m; k*=2) {
		for (int j=k/2; j>0; j/=2) {
			for (int i=0; i<m; i++) {
				int l=i^j;
				if (l>i) {
					custom_schedule(ord[i],ord[l],n);
				}
			}
			vi temp=custom_visit(n);
			int pt=0;
			for (int i=0; i<m; i++) {
				int l=i^j;
				if (l>i) {
					if (((i&k)==0 && temp[pt]==0) || ((i&k)!=0 && temp[pt]==1)) {
						swap(ord[i],ord[l]);
					}
					pt++;
				}
			}
		}
	}
	while (ord.size()>n) {
		ord.pop_back();
	}
    answer(ord);
}
#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...
#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...