Submission #488043

#TimeUsernameProblemLanguageResultExecution timeMemory
488043PixelCatMinerals (JOI19_minerals)C++14
70 / 100
32 ms2580 KiB
#include <bits/stdc++.h>
#include "minerals.h"
#define int LL //__int128
#define double long double
using namespace std;
using LL=long long;
using uLL=unsigned long long;
using pii=pair<LL,LL>;

#define For(i,a,b)    for(int i=a;i<=b;i++)
#define Fors(i,a,b,s) for(int i=a;i<=b;i+=s)
#define Forr(i,a,b)   for(int i=a;i>=b;i--)
#define F first
#define S second
#define L(id) (id*2+1)
#define R(id) (id*2+2)
#define LO(x) (x&(-x))

#define eb emplace_back
#define all(x) x.begin(),x.end()
#define sz(x) ((int)x.size())
#define mkp make_pair

#define MOD (int)(1000000007)
#define INF (int)(1000000000000000ll) //1e15
#define EPS (1e-6)

#ifdef NYAOWO
#include "debug.hpp"
inline void USACO(const string &s) { cerr<<"USACO: "<<s<<"\n"; }

#else
#define debug(...)
inline void timer(){}
inline void USACO(const string &s){
	freopen((s+".in").c_str(),"r",stdin);
	freopen((s+".out").c_str(),"w",stdout);
}

#endif

inline void NYA() { ios::sync_with_stdio(false); cin.tie(0); }
inline int gcd(int a,int b) { return __gcd(a,b); }
inline int lcm(int a,int b) { return a/gcd(a,b)*b; }
int fpow(int b,int p,const int &mod){
	int ans=1;
	while(p){
		if(p&1) ans=ans*b%mod;
		p/=2; b=b*b%mod;
	}
	return ans;
}
int fpow(int b,int p) { return fpow(b,p,MOD); }
template<typename T> inline void chmin(T &_a,const T &_b) { if(_b<_a) _a=_b; }
template<typename T> inline void chmax(T &_a,const T &_b) { if(_b>_a) _a=_b; }
//mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

struct Interactor{
	bitset<90000> bs;
	int last=0;
	void init(){
		bs.reset();
	}
	bool push(int x){
		bool ans=false;
		if(!bs[x]){
			int now=Query(x);
			bs[x]=true;
			ans=(now!=last);
			last=now;
		}
		return ans;
	}
	bool pop(int x){
		bool ans=false;
		if(bs[x]){
			int now=Query(x);
			bs[x]=false;
			ans=(now!=last);
			last=now;
		}
		return ans;
	}
	bool toggle(int x){
		int now=Query(x);
		bs[x]=!bs[x];
		bool ans=(now!=last);
		last=now;
		return ans;
	}
}inter;

void Solve(int32_t n){
	vector<int> l,r;
	For(i,1,n*2){
		if(inter.toggle(i)) r.eb(i);
		else l.eb(i);
	}
	vector<int> t(n);
	For(pos,0,15){
		int cnt=0;
		For(i,0,n-1){
			if(i&(1<<pos)) inter.push(r[i]);
			else { inter.pop(r[i]); cnt++; }
		}
		int now=0;
		For(i,0,n-1){
			if(inter.toggle(l[i])){
				t[now]=l[i];
				now++;
				l[i]=0;
				if(now==cnt) break;
			}
		}
		For(i,0,n-1) if(l[i]!=0){
			t[now]=l[i];
			now++;
		}
		assert(now==n);
		l.swap(t);
	}
	For(i,0,n-1) Answer(l[i],r[i]);
}

// void Solve(int32_t N) {
//   int v = Query(1);
//   for (int i = 1; i <= N; ++i) {
//     Answer(i, 2 * N + 1 - 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...