QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#877795#9538. Closest DerangementlunchboxML 0ms9960kbC++171.6kb2025-02-01 08:44:022025-02-01 08:44:02

Judging History

This is the latest submission verdict.

  • [2025-02-01 08:44:02]
  • Judged
  • Verdict: ML
  • Time: 0ms
  • Memory: 9960kb
  • [2025-02-01 08:44:02]
  • Submitted

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...

output:


result: