F题
#include<iostream>
using namespace std;
const int N = 1000010;
int n,q,x,y;
long long arr[N];
long long arr1[N];
long long temp[N];
long long merege_sort(long long arr[], int l, int r) {
if (l == r) return 0;
int mid = (l + r) / 2;
long long res = 0;
res += merege_sort(arr, l, mid);
res += merege_sort(arr, mid + 1, r);
int i = l, j = mid + 1, k = 0;
while (i <= mid && j <= r) {
if (arr[i] <= arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
res += mid - i + 1;
}
}
while (i <= mid) temp[k++] = arr[i++];
while (j <= r) temp[k++] = arr[j++];
for (i = l, k = 0; i <= r; i++, k++) {
arr[i] = temp[k];
}
return res;
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
arr1[i]=arr[i];
}
cin>>q;
while(q--)
{
cin>>x>>y;
swap(arr[x],arr[y]);
swap(arr1[x],arr1[y]);
cout << merege_sort(arr, 0, n - 1)%2 << endl;
for(int i=0;i<n;i++)
{
arr[i]=arr1[i];
}
}
return 0; // 确保程序正常结束
}
利用归并排序找逆序对数量,由于找完数组也被重新排序,因此复制数组arr1记录数组原内容,但不懂哪里错了,通过率20