[BalticOI 2022 Day1] Art Collection 题解
考虑对于每个元素单独计算排名。假设我们现在要求
-
R_1=\{x,\ldots\} -
R_2=\{\ldots,x\}
其中两者
根据题意,可以得出
考虑压缩询问次数,即考虑合并一些元素的询问:观察到
放代码(代码中的数组均为
#include<bits/stdc++.h>
using namespace std;
void answer(vector<int>);
int publish(vector<int>);
void solve(int n){
vector<int> a(n),r(n);
for(int i=0;i<n;i++){
vector<int> v;
for(int j=i;j<n;j++)
v.emplace_back(j+1);
for(int j=0;j<i;j++)
v.emplace_back(j+1);
a[i]=publish(v);
} // 循环位移构造询问
for(int i=0;i<n;i++)
r[a[i]-a[(i+1)%n]+n-1>>1]=i+1;
// 计算排名并存入答案
answer(r);
}