linkkk 题意:
将的奇数任意顺序放到
数组,偶数任意顺序放到
数组。每次可以交换某数组的相邻两项,问
的最小操作次数。
思路:
元素互不相同,比较第一个就行。
每次可以只移动中元素或
中元素或两者都移动,考虑怎么计算最优。
枚举的首元素是哪个就可以了。
用表示将
移动到首位需要的次数。
从倒着遍历,遇到奇数的话更新答案,遇到偶数的话更新将元素移动到首位的最小次数,由于是倒着枚举,所以对于奇数来说,后面的偶数比他大,次数还小,所以一定满足
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10,inf=0x3f3f3f3f;
int a[maxn],b[maxn];
map<int,int>mp;
int main(){
int _;cin>>_;
while(_--){
int n;cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],mp[a[i]]=i-1;
for(int i=1;i<=n;i++) cin>>b[i],mp[b[i]]=i-1;
int ans=inf,res=inf;
for(int i=2*n;i;i--)
if(i&1) ans=min(ans,mp[i]+res);
else res=min(res,mp[i]);
cout<<ans<<endl;
}
return 0;
}
/*
3
3 5 1
2 4 6
*/