Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- using namespace std;
- long long merge_series (long long *arr, long long first, long long last_1, long long last_2, long long *dubl)
- {
- long long i = first;
- long long j = last_1+1;
- long long c = 0;
- long long sum = 0;
- for (c = first; c <= last_2; c++)
- {
- if (j > last_2)
- dubl[c] = arr[i++];
- else if (i > last_1)
- dubl[c] = arr[j++];
- else if (arr[i] > arr[j])
- {
- dubl[c] = arr[j];
- sum += last_1 - i+1;
- j++;
- }
- else
- {
- dubl[c] = arr[i++];
- }
- }
- //cout << sum << " ";
- return sum;
- }
- void sort (long long *arr, long long first, long long last, long long *dubl, long long &sum)
- {
- int middle = (first + last)/2;
- if (first < middle)
- sort (arr, first, middle, dubl, sum);
- if (middle + 1 < last)
- sort (arr, middle+1, last, dubl, sum);
- sum += merge_series (arr, first, middle, last, dubl);
- //cout << sum << endl;
- for (int i = first; i <= last; i++)
- arr[i] = dubl[i];
- }
- int main()
- {
- long long n=0;
- cin >> n;
- long long sum = 0;
- long long *arr = new long long[n];
- for (long long i=0; i<n; i++)
- cin >> arr[i];
- long long *dubl = new long long[n];
- sort (arr, 0, n-1, dubl, sum);
- cout << sum << endl;
- //for (int i=0; i < n; i++) cout << arr[i] << " ";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement