This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "sorting.h"
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define f first
#define s second
#define all(x) x.begin(),x.end()
#define sz(x) (int)x.size()
int idx[200005], idx2[200005], sta[200005], sta2[200005];
int val[200005];
int st[200005 * 3],ed[200005 * 3];
int vi[200005];
int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
int l = 0, r = M - 1;
while(l <= r)
{
for(int i = 0; i < N; i++)
val[S[i]] = i, idx[i] = idx2[i] = sta[i] = sta2[i] = i;
memset(vi, 0, sizeof(vi));
int mid = (l + r) / 2;
for(int m = 0; m <= mid; m++)
{
swap(idx[sta[X[m]]],idx[sta[Y[m]]]);
swap(sta[X[m]],sta[Y[m]]);
}
int cnt = 0;
for(int i = 0; i < N; i++)
{
if(!vi[i])
{
int nw = i;
while(!vi[nw])
{
vi[nw] = 1;
st[cnt] = sta[nw];
ed[cnt] = sta[idx[val[nw]]];
cnt++;
nw = idx[val[nw]];
}
cnt--;
}
}
if(l == r)
{
for(int i = 0; i < cnt; i++)
{
swap(idx2[sta2[X[i]]],idx2[sta2[Y[i]]]);
swap(sta2[X[i]],sta2[Y[i]]);
P[i] = idx2[st[i]];
Q[i] = idx2[ed[i]];
}
for(int i = cnt; i < mid + 1; i++)
P[i] = 0, Q[i] = 0;
return mid + 1;
}
if(cnt <= mid + 1)
r = mid;
else
l = mid + 1;
}
return -1;
}
# | 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... |