Cerință
Se dă un şir de numere naturale, care trebuie ordonat crescător. Singura operaţie permisă este să consideraţi elementele de pe poziţiile (pentru şi arbitrare, ), şi să inversaţi ordinea acestor elemente (adică elementul de pe poziţia ajunge pe poziţia , ajunge pe poziţia , , ajunge pe poziţia i). Costul unei astfel de operaţii este numărul de elemente din subşirul inversat, şi anume .
Scrieţi un program care să determine o secvenţă de operaţii care ordonează crescător şirul dat şi are un cost total cât mai mic (dar nu obligatoriu minim).
Date de intrare
Fişierul de intrare invsort.in
conţine pe prima linie numărul , şi apoi linii cu elementele şirului dat (nu neapărat distincte).
Date de ieșire
Fişierul de ieşire invsort.out
va conţine pe fiecare linie descrierea unei operaţii. O operaţie este descrisă prin numerele şi , separate printr-un spaţiu. Aceste numere satisfac .
Restricții și precizări
- valorile şirului care trebuie ordonat sunt între şi
- dacă şirul de operaţii (executate în ordinea din fişierul de ieşire) nu ordonează intrarea, primiţi puncte
- în cazul în care costul total este cel mult (patru milioane) primiţi punctaj maxim
- în cazul în care costul total este cel mult (patruzeci de milioane) primiţi din punctajul pe test
- în din teste şirul de intrare conţine numai elemente de şi
- pentru toate testele folosite la corectare,
Exemplu
invsort.in
5
1
0
1
1
0
invsort.out
3 5
1 3
Explicație
- prima operaţie are efectul:
- a doua operaţie are efectul:
- costul total este