Cod sursa(job #2342804)

Utilizator AndreiJJIordan Andrei AndreiJJ Data 13 februarie 2019 13:02:34
Problema Litere Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
const int MOD = 9917;
int a[10005], b[10005], sol;;
ifstream fin ("litere.in");
ofstream fout ("litere.out");
void Merge (int left, int right, int m)
{
    int i, j, k = 0;
    i = left;
    j = m + 1;
    while (i <= m && j <= right)
        if (a[i] <= a[j]) b[++k] = a[i++];
        else
        {
            sol = (sol + (m - i + 1)) % MOD;
            b[++k] = a[j++];
        }
    while (i <= m)
        b[++k] = a[i++];
    while (j <= right)
        b[++k] = a[j++];
    j = 1;
    for (i = left; i <= right; i++)
        a[i] = b[j++];
}

void MergeSort (int left, int right)
{
    if (right - left <= 1)
    {
        if (a[right] < a[left])
        {
            swap (a[left], a[right]);
            sol++;
            sol %= MOD;
        }
    }
    else
    {
        int m = (left + right) / 2;
        MergeSort(left, m);
        MergeSort(m + 1, right);
        Merge(left, right, m);
    }
}

int main()
{
    int n;
    char ch;
    fin >> n;
    for (int i = 1; i <= n; i++)
    {
        fin >> ch;
        a[i] = ch - 'a' + 1;
    }
    MergeSort(1, n);
    fout << sol << "\n";
    fout.close();
    return 0;
}