제출 #622256

#제출 시각아이디문제언어결과실행 시간메모리
622256aworue순열 (APIO22_perm)C++17
100 / 100
9 ms392 KiB
#include <bits/stdc++.h>
#include <perm.h>
using ll = long long;
//#define int ll
using namespace std;
 
#define sz(x) (int)(x).size()
#define foru(i, l, r) for(int i = l; i <= r; i++)
#define ford(i, l, r) for(int i = l; i >= r; i--)
#define fi first
#define se second
#define mod 998244353
 
#define db(x) cerr << __LINE__ << " " << #x << " " << x << "\n"
using vi = vector<int>;
using pi = pair<int, int>;
 
const int N = 200005;
const ll inf = 2e18;
     
vi construct_permutation(ll k){
	if(k == 1) return {};
	if(k == 2) return {0};
	if(k == 3) return {1, 0};
	auto res = construct_permutation(k / 4);
	int s = sz(res);
	if(k % 4 == 0){
		res.push_back(s);
		res.push_back(s + 1);
		return res;
	}
    if(k % 4 == 1){
    	res.push_back(s);
    	res.push_back(s + 1);
    	res.push_back(-1);
    	for(auto &x : res) x++;
    	return res;
    }
    if(k % 4 == 2){
    	res.push_back(s);
    	res.push_back(-1);
    	res.push_back(s + 1);
    	for(auto &x : res) x++;
    	return res;
    }
    auto z = res;
    res.push_back(s);
    res.push_back(s + 1);
    for(auto &x : res) if(x > 1) x++;
    res.push_back(2);
    vector<ll> f(sz(res));
	ll sum = 1;	
	foru(i, 0, sz(res) - 1){
    	f[i] = 1;
		foru(j, 0, i - 1){
			if(res[j] < res[i]) f[i] += f[j];
			f[i] = min(f[i], inf);
		}
		sum += f[i]; sum = min(sum, inf);
	}
    if(sum == k) return res;
    for(auto &x : z) x += 2;
    z.push_back(s + 2);
    z.push_back(1);
    z.push_back(s + 3);
    z.push_back(0);
    return z;
}
     
/*void solve(){
	int q; cin >> q;
	while(q--){
		int k; cin >> k;
		auto res = construct_permutation(k);
		for(auto &x : res){
			cout << x << " ";
		}
		cout << "\n";
	}
}

signed main(){
	ios_base::sync_with_stdio(0); cin.tie(0);
	int t = 1; // cin >> t;
	while(t--){
		solve();
	}
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...