//用两个数组分别记录每个数第一次和第二次出现的位置(第一次a[i]记录,第二次b[i]记录) //循环一次对应位置b[i]-a[i]-1全部加在一起,就是初始的权值和 //然后我们还可以进行一次交换操作,采用贪心的策略,每次把最大的a[i]换最小的b[i],可以实现最大化权值和。 //如果最大的a[i]比最小的b[i]还小那就不换,换了权值和会变小。 #include <algorithm> #include <bits/stdc++.h> using namespace std; #define ll long long int main() { int n; cin>>n; vector<int> a(n+1); vector<int> b(n+1); for(int i=1;i<=2*n;i++){ int x; cin>>x; if(a[x]==0) a[x]=i; else b[x]=i; } ll ans=0; for(int i=1;i<=n;i++){ ans+=b[i]-a[i]-1; } sort(a.begin(),a.end()); sort(b.begin(),b.end()); if(a[n]>b[1]) ans+=2*(a[n]-b[1]); cout<<ans<<'\n'; return 0; }