#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vll vector<ll>
#define all(x) begin(x),end(x)
#define pb push_back
const int N=1e6+10;
bool vis[N];
int num[N],L[N],R[N],d[N];
void add(int l,int r)
{
d[l]++;
d[r+1]--;
}
long long minimum_walk(std::vector<int> p, int s)
{
int cyc=0;
int n=p.size();
for(int i=0;i<=n;i++)vis[i]=0,L[i]=R[i]=-1,d[i]=0;
ll ans=0;
for(int i=0;i<n;i++)ans+=abs(p[i]-i);
for(int i=0;i<n;i++)
{
if(vis[i] or p[i]==i)continue;
int j=i;
L[cyc]=R[cyc]=i;
while(!vis[j])
{
num[j]=cyc;
vis[j]=1;
j=p[j];
R[cyc]=max(R[cyc],j);
}
cyc++;
}
set<int> tp;
int pads=-1;
// cout<<cyc<<endl;
for(int i=0;i<n;i++)
{
if(i>pads)
{
if(tp.size()==cyc)
{
break;
}
else
{
ans+=2;
}
}
tp.insert(num[i]);
pads=max(pads,R[num[i]]);
}
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... |