Algoritmul StalinSort este un algoritm de sortare care este definit astfel in pseudocod:
def stalin_sort(A)
dacă A este vid
return A
rezultat ← listă goală
ultim ← A[1]
adaugă ultim în rezultat
pentru i ← 2 până la lungime(A)
dacă A[i] ≥ ultim
adaugă A[i] în rezultat
ultim ← A[i]
altfel
continuă
return rezultat
Cu alte cuvinte, algoritmul sterge de la stanga la dreapta toate valorile care sunt mai mici decat cea din stanga sa.
De exemplu, pentru , algoritmul va returna , fiindca sterge valorile si care nu sunt in ordine.
Cerință
Se da un sir de numere intregi, indexat de la . Definim suma lungimilor tuturor sirurilor rezultate din aplicarea Stalin Sort asupra subsecventelor care incep in pozitia . Sa se determine .
Date de intrare
Pe prima linie a fișierului de intrare stalinsort.in se gaseste numarul natural nenul .
Pe a doua linie a fisierului de intrare stalinsort.in se vor gasi numere intregi, separate prin spații, reprezentând lista .
Date de ieșire
Pe prima linie a fișierului de ieșire stalinsort.out se vor gasi numere naturale separate prin spații, al -lea reprezentând .
Restricții și precizări
- Se garanteaza ca raspunsurile pot fi reprezentate pe de biti cu semn.
- O subsecventa delimitata de capetele [l, r] a sirului este sirul , cu , cu . De exemplu, pentru , subsecventa a sirului este .
- Pentru teste in valoare de puncte:
- Pentru alte teste in valoare de puncte:
- Pentru alte teste in valoare de puncte:
- Pentru alte teste in valoare de puncte:
- Pentru alte teste in valoare de puncte: , exista maximum pozitii pentru care
- Pentru alte teste in valoare de puncte:
Exemplul 1
stalinsort.in
5
1 2 3 4 5
stalinsort.out
15 10 6 3 1
Explicație
stalin_sort([1, 1]) = {1}
stalin_sort([1, 2]) = {1, 2}
stalin_sort([1, 3]) = {1, 2, 3}
stalin_sort([1, 4]) = {1, 2, 3, 4}
stalin_sort([1, 5]) = {1, 2, 3, 4, 5}
Deci,
stalin_sort([2, 2]) = {2}
stalin_sort([2, 3]) = {2, 3}
stalin_sort([2, 4]) = {2, 3, 4}
stalin_sort([2, 5]) = {2, 3, 4, 5}
Deci,
stalin_sort([3, 3]) = {3}
stalin_sort([3, 4]) = {3, 4}
stalin_sort([3, 5]) = {3, 4, 5}
Deci,
stalin_sort([4, 4]) = {4}
stalin_sort([4, 5]) = {4, 5}
Deci,
stalin_sort([5, 5]) = {5}
Deci,
Exemplul 2
stalinsort.in
5
4 6 1 3 5
stalinsort.out
9 4 6 3 1
Explicație
stalin_sort([1, 1]) = {4}
stalin_sort([1, 2]) = {4, 6}
stalin_sort([1, 3]) = {4, 6}
stalin_sort([1, 4]) = {4, 6}
stalin_sort([1, 5]) = {4, 6}
Deci,
stalin_sort([2, 2]) = {6}
stalin_sort([2, 3]) = {6}
stalin_sort([2, 4]) = {6}
stalin_sort([2, 5]) = {6}
Deci,
stalin_sort([3, 3]) = {1}
stalin_sort([3, 4]) = {1, 3}
stalin_sort([3, 5]) = {1, 3, 5}
Deci,
stalin_sort([4, 4]) = {3}
stalin_sort([4, 5]) = {3, 5}
Deci,
stalin_sort([5, 5]) = {5}
Deci,