QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#877795 | #9538. Closest Derangement | lunchbox | ML | 0ms | 9960kb | C++17 | 1.6kb | 2025-02-01 08:44:02 | 2025-02-01 08:44:02 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int N=2e5,L=18;
int n,k,p[N],q[N];
int lg[N+1],st[L][N];
pair<int,bool>o[N];
int qry(int l,int r){
int i=lg[r-l+1];
return min(st[i][l],st[i][r-(1<<i)+1]);
}
int ev(pair<int,bool>a,int i){
int l=a.first,r=a.first+2;
if(i<l)return i^1;
if(i>r)return r+1+((i-r-1)^1);
static int x[3]={1,1,-2},y[3]={2,-1,-1};
return i+(a.second?y[i-l]:x[i-l]);
}
bool les(pair<int,bool>a,pair<int,bool>b){
int l=min(a.first,b.first),r=max(a.first,b.first)+2;
auto f=[&](auto f,int l,int r)->pair<int,bool>{
if(l>r)return {n,0};
int m=qry(l,r);
int x=ev(a,p[m]),y=ev(b,p[m]);
if(x!=y)return{m,x<y};
return min(f(f,l,p[m]-1),f(f,p[m]+1,r));
};
return f(f,l,r).second;
}
int main(){
lg[1]=0;
for(int i=2;i<=N;i++)lg[i]=lg[i/2]+1;
cin.tie(0)->sync_with_stdio(0);
int t;
cin>>t;
while(t--){
cin>>n>>k;
for(int i=0;i<n;i++)cin>>p[i],p[i]--;
if(n%2==0){
if(k>1)cout<<"-1\n";
else for(int i=0;i<n;i++)cout<<1+(p[i]^1)<<" \n"[i==n-1];
continue;
}
if(k>n-1){
cout<<"-1\n";
continue;
}
for(int i=0;i<n;i++)q[p[i]]=i;
for(int i=0;i<n;i++)st[0][i]=q[i];
for(int l=1;1<<l<=n;l++)for(int i=0;i+(1<<l)<=n;i++)
st[l][i]=min(st[l][i-1],st[l][i+(1<<(l-1))]);
for(int i=0;i<n-1;i++)o[i]={i/2*2,i%2};
sort(o,o+n-1,les);
pair<int,bool>a=o[k-1];
for(int i=0;i<n;i++)cout<<1+ev(a,p[i])<<" \n"[i==n-1];
}
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 9960kb
input:
2 2 2 2 1 3 2 1 2 3
output:
-1 3 1 2
result:
ok 2 lines
Test #2:
score: -100
Memory Limit Exceeded
input:
50 6 1 4 2 6 3 5 1 8 1 6 2 8 7 3 4 1 5 3 298728530 2 3 1 4 610615077 2 4 3 1 4 2 4 2 3 1 7 152065238 4 1 3 5 7 6 2 6 844435075 2 6 4 5 1 3 4 544008000 3 2 4 1 9 379783780 5 9 3 8 4 2 1 7 6 5 139426002 2 4 5 3 1 2 1 1 2 2 1 1 2 3 1 3 1 2 4 2 2 4 1 3 4 1 3 2 4 1 5 4 2 4 1 5 3 3 1 1 2 3 6 805720317 5 6...