連結:https://ac.nowcoder.com/acm/contest/9854/G
來源:牛客網
Cg特别喜歡翻轉序列!
跨年夜也要繼續翻轉!
現在有一個長度為n的序列s,Cg将其翻轉之後變成了t。
路過的oxy發現了這個t序列,但是oxy不可以直接将序列翻轉,她隻可以執行一種操作:
選擇任意的兩個數a_i和a_j(j>i),花費j-i将兩數位置交換選擇任意的兩個數a
i
和a
j
(j>i),花費j−i将兩數位置交換
詢問oxy最少花費多少對Cg的 s 進行操作 可以得到Cg的 t 呢?
輸入描述:
一個整數N,代表序列的長度,(1<=N<=100000)
接下來N個整數代表序列s,1<=a_i <= N
輸出描述:
oxy的最小花費~
示例1
輸入
複制
4
1 2 3 4
輸出
複制
4
說明
翻轉之後t = {4,3,2,1},隻需要交換1 4 與 2 3 便可得到 4 3 2 1,花費為4
示例2
輸入
複制
5
1 1 2 3 1
輸出
複制
2
說明
翻轉之後t = {1,3,2,1,1}
s = {1,1,2,3,1},交換2 4之後 s = {1,3,2,1,1}
是以花費為2
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <queue>
#include <map>
#include <stack>
#include <cmath>
using namespace std;
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
#define x first
#define y second
typedef __int128 INT;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
const int N = 1e1 + 10;
const int Mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int P = 13331;
int a[N], b[N];
queue<int> ver[N];
int main(){
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i ++) scanf("%d", &a[i]);
for (int i = 1; i <= n; i ++){
b[i] = a[n - i + 1];
ver[b[i]].push(i);
}
int ans = 0;
for (int i = 1; i <= n; i ++){
int x = ver[a[i]].front();
ver[a[i]].pop();
//cout << x - i << "--------" << endl;
ans += abs(x - i);
}
ans /= 2;
cout << ans << endl;
return 0;
}