Submission #1011668

#TimeUsernameProblemLanguageResultExecution timeMemory
1011668hotboy2703Sorting (IOI15_sorting)C++17
100 / 100
148 ms23172 KiB
#include "sorting.h"
#include<bits/stdc++.h>
using namespace std;
using ll = int;
#define pll pair <ll,ll>
#define fi first
#define se second
#define MP make_pair
#define sz(a) (ll((a).size()))
#define BIT(mask,i) (((mask) >> (i))&1)
#define MASK(i) (1LL << (i))
const ll MAXN = 2e5+100;
ll p[MAXN];
ll pos[MAXN];
void sw(ll x,ll y){
    swap(p[x],p[y]);
    swap(pos[p[x]],pos[p[y]]);
}
int findSwapPairs(int n, int S[], int m, int X[], int Y[], int P[], int Q[]) {
    ll l = 0;
    ll r = n - 1;
    vector <pll> ans;
    while (l <= r){
        ll mid = (l + r) >> 1;
        for (ll i = 0;i < n;i ++){
            p[i] = S[i];
            pos[p[i]] = i;
        }
        for (ll i = 0;i < mid;i ++){
            sw(X[i],Y[i]);
        }
        vector <pll> val;
        for (ll i = 0;i < n;i ++){
            if (p[i] != i){
                val.push_back(MP(i,p[i]));
                sw(i,pos[i]);
            }
        }
        if (sz(val) > mid){
            l = mid + 1;
        }
        else {
            while (sz(val) < mid)val.push_back(MP(0,0));
            for (ll i = mid - 1;i >= 0;i --){
                sw(pos[val[i].fi],pos[val[i].se]);
                val[i] = MP(pos[val[i].fi],pos[val[i].se]);
                sw(X[i],Y[i]);
            }
            ans = val;
            r = mid - 1;
        }
    }
    for (ll i =0 ;i < sz(ans);i ++){
        tie(P[i],Q[i]) = ans[i];
    }
	return sz(ans);
}


Compilation message (stderr)

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:19:39: warning: unused parameter 'm' [-Wunused-parameter]
   19 | int findSwapPairs(int n, int S[], int m, int X[], int Y[], int P[], int Q[]) {
      |                                   ~~~~^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...