Cod sursa(job #2814599)

Utilizator divadddDavid Curca divaddd Data 8 decembrie 2021 12:23:06
Problema Litere Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <iostream>
#define MAX 100002
using namespace std;
int n;
char v[MAX],c[MAX];
long long sol;

ifstream fin("litere.in");
ofstream fout("litere.out");

void interclasare(int st, int mid, int dr){
    int i = st, j = mid+1;
    int k = 0;
    while(i <= mid && j <= dr){
        if(v[i] <= v[j]){
            c[++k] = v[i++];
        }else{
            /// v[i] > v[j]
            sol = (sol+mid-i+1)%9917;
            c[++k] = v[j++];
        }
    }
    while(i <= mid){
        c[++k] = v[i++];
    }
    while(j <= dr){
        c[++k] = v[j++];
    }
    for(int i = st; i <= dr; i++){
        v[i] = c[i-st+1];
    }
}

void mergeSort(int st, int dr){
    if(st < dr){
        int mid = (st+dr)/2;
        mergeSort(st, mid);
        mergeSort(mid+1, dr);
        interclasare(st, mid, dr);
    }
}

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++){
        fin >> v[i];
    }
    mergeSort(1, n);
    fout << sol << "\n";
    return 0;
}