Submission #1246412

#TimeUsernameProblemLanguageResultExecution timeMemory
1246412trideserArt Collections (BOI22_art)C++20
50 / 100
375 ms604 KiB
#include "art.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> def;
int defcount;
bool compare(int a, int b) {
	def[a - 1] = b;
	def[b - 1] = a;
	int ans = publish(def); 
	if(ans == defcount)
		exit(1);
	def[a - 1] = a;
	def[b - 1] = b;
	return ans < defcount;
}

vector<int> merge(vector<int>& l, vector<int>& r) {
	vector<int> ret;
	int ll = 0;
	int rr = 0;
	while(ll != l.size() && rr != r.size()) {
		if(compare(l[ll], r[rr])) {
			ret.push_back(r[rr]);
			rr++;
		}
		else{
			ret.push_back(l[ll]);
			ll++;
		}
	}
	while(ll < l.size()) {
		ret.push_back(l[ll]);
		ll++;
	}
	while(rr < r.size()) {
		ret.push_back(r[rr]);
		rr++;
	}
	return ret;
}

void solve(int N) {
	def = vector<int>(N);
	vector<vector<int>> parts;
	for(int i = 0; i < N; i++) {
		def[i] = i + 1;
		parts.push_back(vector<int>());
		parts.back().push_back(i + 1);
	}
	defcount = publish(def);
	while(parts.size() > 1) {
		vector<vector<int>> newparts;
		for(int i = 0; i < parts.size() - 1; i += 2) {
			newparts.push_back(merge(parts[i], parts[i + 1]));
		}
		if(parts.size() % 2 == 1)
			newparts.push_back(parts.back());
		parts = newparts;
	}
	answer(parts.back());
}
#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...