Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <iostream>
- #include <vector>
- #include <algorithm>
- const int N = 1e5;
- int inv = 0, A[N];
- void merge (int *A, int low, int high, int mid) {
- int C[N], i, j, k;
- i = low; j = mid + 1; k = low;
- while (j <= high && i <= mid + 1) {
- if (A[i] < A[j]) {
- inv += 1;
- C[k] = A[i];
- i += 1; k += 1;
- }
- else {
- C[k] = A[j];
- j += 1;
- k += 1;
- }
- }
- while (i <= mid) {
- C[k] = A[i];
- k += 1; i += 1;
- }
- while (j <= high) {
- C[k] = A[j];
- k += 1; j += 1;
- }
- for (int i = low; i < k; ++i){
- A[i] = C[i];
- }
- }
- void mergesort (int *A, int low, int high) {
- int mid;
- if (low < high) {
- mid = (low+high)/2;
- mergesort(A, low, mid);
- mergesort(A, mid + 1, high);
- merge (A, low, high, mid);
- }
- }
- int main() {
- int n, a;
- // std::vector<int> A;
- scanf("%d", &n);
- for (int i = 0; i < n; ++i) {
- scanf("%d", &A[i]);
- // A.push_back(a);
- }
- mergesort(A, 0, n - 1);
- for (int i = 0; i < n; ++i){
- printf("%d ", A[i] );
- }
- // printf("%d\n",inv );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement