#include using namespace std; int getMinSwaps(vector v) { vector v1(v); //将A内元素复制到B。 sort(v1.begin(), v1.end()); map m; int len = v.size(); for (int i = 0; i < len; i++) { m[v1[i]] = i; // 建立每个元素与其应放位置的映射关系 } int loops = 0; // 循环节个数 vector flag(len, false); //初始化 //找出循环节的个数 for (int i = 0; i < len; i++) { if (!flag[i]) { int j = i; while (!flag[j]) //对环处理 { flag[j] = true; j = m[v[j]]; //原序列中j位置的元素在有序序列中的位置 } loops++; } } return len - loops; } vector v; int main() { int n,k; cin>>n; while(n--){ cin>>k; v.push_back(k); } int num = getMinSwaps(v); cout<