Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define maxn 1000000
- int a[maxn];
- int temp[maxn];
- int n;
- int cnt = 0;
- void merge (int l, int k, int r) {
- int i = l, j = k+1, v = 0;
- while (i <= k && j <= r) {
- if (a[i] < a[j]) {
- temp[v] = a[j];
- cnt += (k-i+1);
- ++j;
- } else {
- temp[v] = a[i];
- ++i;
- }
- ++v;
- }
- while (i <= k) {
- temp[v] = a[i];
- ++i;
- ++v;
- }
- while (j <= r) {
- temp[v] = a[j];
- ++j;
- ++v;
- }
- for (i = l; i <= r; ++i) {
- a[i] = temp[i-l];
- }
- return;
- }
- void MergeSort (int l, int r) {
- if (l < r) {
- int k = (l+r)/2;
- MergeSort(l, k);
- MergeSort(k+1, r);
- merge(l, k, r);
- }
- }
- int main () {
- scanf("%d", &n);
- for (int i = 1; i <= n; ++i) {
- scanf("%d", &a[i]);
- }
- MergeSort(1, n);
- printf("%d\n", cnt);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement