Cod sursa(job #2810941)

Utilizator Dragono63Stanciu Rares Stefan Dragono63 Data 30 noiembrie 2021 17:45:10
Problema Litere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.91 kb
#include <bits/stdc++.h>
#define NMAX 10005

using namespace std;

/********************************/
/// INPUT / OUTPUT

ifstream f("litere.in");
ofstream g("litere.out");
/********************************/
/// GLOBAL DECLARATIONS

long long N, ans;
int temp[NMAX];
char ch;

vector <int> num;
/********************************/
/// FUNCTIONS

void ReadInput();
void Solution();
void Output();
/********************************/
///------------------------------------------
inline void ReadInput()
{
    f >> N;

    for (int i = 0 ; i < N ; ++ i)
    {
        f >> ch;
        num.push_back(ch - 'a' + 1);
    }
}
///------------------------------------------
long long Merge(int left, int mid, int right)
{
    long long inversions = 0;
    int nr = left;
    int i = left, j = mid + 1;

    while (i <= mid && j <= right)
    {
        if (num[i] <= num[j])
        {
            temp[nr ++] = num[i ++];
        }
        else
        {
            inversions += mid - i + 1;
            temp[nr ++] = num[j ++];
        }
    }

    while (i <= mid)
    {
        temp[nr ++] = num[i ++];
    }

    while (j <= right)
    {
        temp[nr ++] = num[j ++];
    }

    for (int i = left ; i <= right ; ++ i)
    {
        num[i] = temp[i];
    }

    return inversions;
}
///------------------------------------------
long long MergeSort(int left, int right)
{
    long long inversions = 0;
    if (left < right)
    {
        int mid = left + (right - left) / 2;

        inversions = MergeSort(left, mid);
        inversions += MergeSort(mid + 1, right);

        inversions += Merge(left, mid, right);
    }

    return inversions;
}
///------------------------------------------
inline void Solution()
{
    ans = MergeSort(0, N - 1);
}
///------------------------------------------
inline void Output()
{
    g << ans;
}
///------------------------------------------
int main()
{
    ReadInput();
    Solution();
    Output();
    return 0;
}