Submission #514946

#TimeUsernameProblemLanguageResultExecution timeMemory
514946kostia244Minerals (JOI19_minerals)C++17
85 / 100
54 ms2736 KiB
#include "minerals.h"
#include<bits/stdc++.h>
#define all(x) begin(x), end(x)
using namespace std;
bitset<90000> on;
int uwusgi(int x) {
	on.flip(x);
	return Query(x);
}
#define Query uwusgi
void Solve(int N) {
	vector<int> A, B, C(N), V;
	{
		mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
		vector<int> ord(2*N);
		iota(all(ord), 1);
		shuffle(all(ord), rng);
		int lst = 0;
		for(auto i : ord) {
			int cc = Query(i);
			if(cc == lst) {
				V.push_back(A.size());
			}
			(cc==lst ? B : A).push_back(i);
				
			lst = cc;
		}
	}
	// int CC = 0;
	for(int b = 0; b < 16; b++) {
		int lst = 0;
		for(int i = 0; i < N; i++)
			if(((i>>b)&1)^on[A[i]])
				lst = Query(A[i]);
		vector<int> cnt(1<<16), cnto(1<<16);
		for(auto i : C) cnt[i]++;
		for(int i = 0; i < 1<<b; i++) {
			for(int j = 0; j < 1<<(16-b); j++) {
				int c = i | (j<<b);
				if(c<N)
					cnto[i] += j&1;
			}
		}
		for(int i = 0; i < N; i++) {
			if((C[i]|(1<<b)) > V[i] || !cnto[C[i]]) {cnt[C[i]]--;continue;}
			if(cnto[C[i]]) {
				int qq = -1;
				
				if(cnto[C[i]] == cnt[C[i]] && lst != qq) qq = lst;//cout << "HEY"<<endl;
				else qq = Query(B[i]);
				if(lst == qq) cnto[C[i]]--;
				C[i] |= (lst == qq)<<b;
				lst = qq;
			} else {
				C[i] |= cnto[C[i]]<<b;
				cnto[C[i]]--;
			}
			cnt[C[i]]--;
		}
		// for(auto i : C) cout << i << " "; cout << endl;
	}
	for(int i = 0; i < N; i++)
		Answer(A[C[i]], B[i]);

}
#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...