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

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务