Una dintre modalitățile de ordonare crescătoare a unui șir de numere, numită sortare prin inserare, este descrisă în continuare. Presupunem că elementele șirului sunt numere naturale, dispuse pe poziții consecutive începând cu și numite . Numim prefix secvența de valori ce ocupă pozițiile . Deci prefix este primul element, prefix este primul element urmat de al doilea, prefix este tot șirul. La pasul , cu începând de la , presupunem că prefixul este ordonat și inserăm elementul . Inserarea se face comparând elementul nou cu valori de la finalul prefixului , în ordine descrescăatoare a indicilor și atunci când elementul curent (cel aflat pe poziția la începutul acestui pas) este mai mic, cele două se interschimbă. Evident, când se ajunge în față sau când se întâlnește un element mai mic decât cel curent, pasul curent se încheie, obținând astfel prefixul i ca fiind ordonat, fiind așadar pregătiți pentru pasul următor.
Iată un exemplu. Considerăm șirul .
La pasul 2 considerăm prefixul , format doar cu elementul cu valoarea , sortat. Inserăm pe în acest prefix. Nu este necesară nicio operație de interschimbare, așadar șirul rămâane neschimbat:
2 4 3 5 1
.
La pasul 3, elementul trebuie inserat în prefixul sortat format din și . El se compară cu , fiind nevoie de interschimbare, apoi întâlnește un element mai mic, și ne oprim. Astfel, șirul devine:
2 3 4 5 1
La pasul 4 ajungem să inserăm pe . Prefixul anterior este ordonat. Întrucât este deja mai mare decât ultimul element al prefixului anterior sortat, nu este necesară nicio interschimbare.
La pasul 5, elementul are nevoie de interschimbări, în ordine cu până ajunge la locul său.
Cerința problemei este să determinăm câte elemente nu participă la nicio interschimbare dacă aplicăm acest algoritm de ordonare și care sunt aceste elemente (pentru exemplul de mai sus rezultatul ar fi fost 0 îıntrucât orice element trebuie supus cel puțin unei interschimbări).
Date de intrare
Pe prima linie a fișierului de intrare se găsește numărul reprezentând dimensiunea șirului dat. Pe linia a 2-a se află cele numere ale șirului. Se garantează că acestea sunt chiar valorile de la la , fiecare apărând exact o dată (altfel spus, o permutare a șirului ). Numerele de pe linia a 2-a sunt separate prin câte un spațiu.
Date de ieșire
Pe prima linie a fișierului de ieșire se va scrie , numărul de valori care nu participă la nicio interschimbare.
Pe linia a doua se află cele valori determinate, în ordine crescătoare, separate prin câte un spațiu.
Restricții și precizări
- In materialele de specialitate se întâlnesc diverse variante de scriere a algoritmului de sortare prin inserare, inclusiv prin ocolirea operației de interschimbare a două valori. În această problemă analizăm strict varianta descrisă mai sus.
Exemplu
insertsort.in
7
2 1 3 6 5 4 7
insertsort.out
2
3 7