#include "sorting.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;
const long long INF = 1e17;
typedef long long ll;
const ll MOD = 1000002022;
#define F first
#define pb push_back
#define V vector
#define all(v) v.begin(), v.end()
typedef tree<int,null_type,less<int>,rb_tree_tag, tree_order_statistics_node_update> indexed_multiset;
bool check(int m,int n,int S[],int X[],int Y[],int P[],int Q[]) {
    int id[n];
    int p[n];
    int a[n];
    int b[n];
    for (int i=0;i<n;i++) {
        a[i]=S[i];
        id[S[i]]=i;
    }
    for (int i=0;i<m;i++) {
        swap(a[X[i]],a[Y[i]]);
    }
    for (int i=0;i<n;i++) {
        p[i]=a[i];
        b[a[i]]=i;
    }
    int c=0;
    swap(id[S[X[0]]],id[S[Y[0]]]);
    swap(S[X[0]],S[Y[0]]);
    for (int i=0;i<n;i++) {
        if (c==m)break;
        int num1=i;
        int num2=a[i];
        if (num1==num2)continue;
        swap(b[num1],b[num2]);
        a[b[num1]]=num1;
        a[b[num2]]=num2;
        P[c]=id[num1],Q[c]=id[num2];
        if (c+1<m) {
            swap(id[S[P[c]]],id[S[Q[c]]]);
            swap(S[P[c]],S[Q[c]]);
            swap(id[S[X[c+1]]],id[S[Y[c+1]]]);
            swap(S[X[c+1]],S[Y[c+1]]);
        }
        c++;
    }
    for (int i=c;i<m;i++) {
        P[i]=0,Q[i]=0;
    }
    for (int i=0;i<n;i++) {
        if (a[i]!=i) {
            return false;
        }
    }
    return true;
}
int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
    P[0] = 0;
    Q[0] = 0;
    int n=N,m=M;
    int l=0,r=m;
    int ans=-1;
    while (l<=r) {
        int mid=l+(r-l)/2;
        int c[n];
        for (int i=0;i<n;i++) {
            c[i]=S[i];
        }
        if (check(mid,n,c,X,Y,P,Q)) {
            ans=mid;
            r=mid-1;
        }
        else
            l=mid+1;
    }
    int c[n];
    for (int i=0;i<n;i++) {
        c[i]=S[i];
    }
    check(ans,n,c,X,Y,P,Q);
    return ans;
}
| # | 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... |