Pagini recente » Cod sursa (job #2778474) | Cod sursa (job #1517720) | Cod sursa (job #900481) | Cod sursa (job #1076986) | Cod sursa (job #1783261)
#include <cstdio>
#include <cstdlib>
#define mod 9917
using namespace std;
FILE *f = fopen("inv.in", "r");
FILE *g = fopen("inv.out", "w");
int inv;
int* Interclaseaza(int *v1, int n, int *v2, int m) {
int i1 = 0, i2 = 0, k = 0;
int *c = (int*)calloc(n + m + 1, sizeof(int));
while (i1 < n && i2 < m) {
if(v1[i1] > v2[i2]) {
c[k++] = v2[i2];
i2++;
inv = (inv + n - i1) % mod;
} else {
c[k++] = v1[i1];
i1++;
}
}
while (i1 < n) {
c[k++] = v1[i1];
i1++;
}
while (i2 < m) {
c[k++] = v2[i2];
i2++;
}
return c;
}
int* MergeSort(int* v, int n) {
int m = n / 2, *v1, *v2;
if(n > 1) {
v1 = MergeSort(v, m);
v2 = MergeSort(v + m, n - m);
int* rez = Interclaseaza(v1, m, v2, n - m);
return rez;
} else {
return v;
}
}
int main()
{
int n;
fscanf(f, "%d", &n);
int *v = (int*)calloc(n + 1, sizeof(int));
for (int i = 0; i < n; i++)
fscanf(f, "%d", &v[i]);
MergeSort(v, n);
fprintf(g, "%d", inv);
return 0;
}