Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- using namespace std;
- int *A, *B;
- long long merge(int *a, int *b, int p, int q, int r) {
- int i = p;
- int j = q + 1;
- int s = p;
- long long wynik = 0, druga = 0;
- while (i <= q && j <= r)
- {
- if (a[i] <= a[j])
- {
- b[s] = a[i];
- i++;
- wynik += druga;
- }
- else
- {
- b[s] = a[j];
- j++;
- druga++;
- }
- s++;
- }
- while (i <= q){
- b[s] = a[i];
- i++;
- s++;
- wynik += druga;
- }
- while (j <= r){
- b[s] = a[j];
- j++;
- s++;
- }
- for (int it = p; it <= r; it++)a[it] = b[it];
- return wynik;
- }
- long long mergesort(int *a, int *b, int p, int r){
- long long wynik = 0;
- if (p == r) return wynik;
- int q = (p + r)/2;
- wynik += mergesort(a, b, p, q);
- wynik += mergesort(a, b, q + 1, r);
- wynik += merge(a, b, p, q, r);
- return wynik;
- }
- int main()
- {
- int n, t;
- cin >> n;
- A = new int [n];
- B = new int [n];
- for( int i = 0; i < n; i++){
- scanf("%d",&t);
- A[i] = t;
- }
- printf("%lld", mergesort(A, B, 0, n-1));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement