# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1237513 | Irate | Art Collections (BOI22_art) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
#include "art.h"
using namespace std;
const int mxN = 4005;
vector<int>ANS, pos;
int n, QUERY = 0;
int publish(vector<int>R);
// {
// QUERY++;
// int I = 0;
// for(int i = 0;i < n;++i){
// for(int j = i + 1;j < n;++j){
// I += (pos[R[i]] > pos[R[j]]);
// }
// }
// return I;
// }
void answer(vector<int>R);
// {
// for(int i = 0;i < n;++i){
// if(R[i] != ANS[i]){
// cout << "ERRRR" << endl;
// for(int j : R){
// cout << j << ' ';
// }
// cout << endl;
// return;
// }
// }
// }
int GetPos(int a){
vector<int>temp = {a};
for(int i = 1;i <= n;++i){
if(i == a)continue;
temp.push_back(i);
}
int I = publish(temp);
temp.clear();
for(int i = 1;i <= n;++i){
if(i == a)continue;
temp.push_back(i);
}
temp.push_back(a);
int D = I - publish(temp);
return (D + n - 1) / 2;
}
vector<int>gen(int n){
vector<int>perm(n);
for(int i = 1;i <= n;++i){
perm[i - 1] = i;
}
for(int i = 0;i < 1000;++i){
int a = rand() % n;
int b = rand() % n;
swap(perm[a], perm[b]);
}
return perm;
}
void solve(int N){
n = N;
ANS = gen(n);
pos.resize(n + 1);
for(int i = 0;i < mxN;++i){
for(int j = 0;j < mxN;++j){
hist[i][j] = -1;
}
}
for(int i = 0;i < n;++i){
pos[ANS[i]] = i;
}
cout << endl;
vector<int>res(n);
for(int i = 1;i <= n;++i){
res[GetPos(i)] = i;
}
answer(res);
// cout << QUERY << '\n';
}
// int main(){
// srand(time(0));
// ios_base::sync_with_stdio(0);
// cin.tie(0);
// int N;
// cin >> N;
// solve(N);
// }