#include "swaps.h"
#include<bits/stdc++.h>
using namespace std;
template<typename T>
using vec = vector<T>;
using ll = long long;
using vll = vec<ll>;
using pll = pair<ll,ll>;
#define pb push_back
#define dbg(x) if(1) cerr << #x << ": " << x << endl
int n;
vector<pair<int,int>> grub;
vector<int> loc;
vector<int> personAt;
void sched(int a, int b) {
if(a >= n or b >= n) return;
grub.pb({personAt[a],personAt[b]});
schedule(personAt[a]+1,personAt[b]+1);
}
void veset() {
vector<int> x = visit();
for(int i = 0; i < x.size(); i++) {
if(x[i] == 0) { // i < j
// swap
ll a = grub[i].first;
ll b = grub[i].second;
swap(personAt[loc[a]], personAt[loc[b]]);
swap(loc[a],loc[b]);
}
}
grub = vector<pair<int,int>>();
}
void solve(int N, int V) {
n = N;
loc.resize(N);
personAt.resize(N);
iota(loc.begin(),loc.end(),0);
iota(personAt.begin(),personAt.end(),0);
int nPow = ceil(log2(N));
int nPad = 1<<nPow;
for(int i = 1; i <= nPow; i++) {
// dbg(i);
int blkSize = (1<<i);
// query(1, n-k+1) for all the blocks
for(int j = 0; j < N; j += blkSize) {
for(int k = 0; k < blkSize/2; k++) {
// dbg(j);
// dbg(k);
sched(j+k, j+blkSize-k-1);
}
}
veset();
if(i > 1) {
for(int j = blkSize / 2; j >= 1; j >>= 1) { // block size
bool flag = 0;
for(int k = 0; k < n; k += j) { // for each block
for(int l = 0; l < j/2; l++) { // the thing
// cerr << j << " " << k << " " << l << endl;
flag = 1;
sched(k+l, k+l+j/2);
}
}
if(flag) veset();
}
}
}
vec<int> ans(N);
for(int i = 0; i < N; i++) {
ans[i] = personAt[i]+1;
}
answer(ans);
}
/*
8 100
7 2 3 1 4 8 6 5
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |