Cod sursa(job #1315477)

Utilizator simaghitaSima Gheorghe Eugen simaghita Data 12 ianuarie 2015 20:47:06
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include<fstream>
using namespace std;
int a[100010],b[100010],n,sol;
void Interclasare(int p, int m, int q)
{
	int i,j,k=0;
	i = p;
	j = m + 1;
	while(i<=m && j<=q)
		if(a[i] <= a[j])
			b[++k] = a[i++];
		else
		{
		   b[++k] = a[j++];
		   sol+=(m-i+1);
		   sol%=9917;
		}

	while(i<=m)
		b[++k] = a[i++];

	while(j<=q)
		b[++k] = a[j++];

	for(i=1, j=p; i<=k; i++)
		a[j++] = b[i];
}

void MergeSort(int p, int q)
{
    int m;
	if(p<q)
	{
		m = (p + q) / 2;
		MergeSort(p, m);
		MergeSort(m+1, q);
		Interclasare(p, m, q);
	}
}
void citire()
{
    ifstream fin("inv.in");
    fin>>n;
    for(int i=1;i<=n;++i)
        fin>>a[i];
    fin.close();
}
int main()
{
    citire();
    MergeSort(1,n);
    ofstream fout("inv.out");
    fout<<sol<<"\n";
    fout.close();
    return 0;
}