Cerință
Tudor și Luca sunt doi tineri programatori. Aceștia tocmai au terminat un curs de algoritmică avansată în C și încearcă să rezolve probleme cât mai eficient. Una dintre problemele la care se gândesc cei doi spune asta:
- există un șir de biți consecutivi numerotați de la la care inițial sunt setați pe
- treptat toți biții vor fi transformați în într-o ordine dată
- pentru fiecare bit transformat spuneți care sunt capetele celei mai lungi secvențe de din care bitul respectiv face parte
Cum Tudor a găsit soluția optimă într-un vis, Luca vă plătește să îi rezolvați și lui problema pentru a nu rămâne în urma prietenului său. Vă roagă să fiți foarte atenți datorită limitelor scăzute, cu cât mai ineficienți, cu atât mai puțini bani!!!
Date de intrare
Pe prima linie a fișierului de intrare algoritmul.in
se găsesc un număr și un șir de numere reprezentând ordinea în care se transformă biții de pe pozițiile .
Date de ieșire
Pe linia i a fișierului de ieșire algoritmul.out
se vor găsi 2 valori, left și right reprezentând capetele secvenței din care bitul de pe poziția face parte.
Restricții și precizări
- ;
- Se acordă de puncte pentru ;
- Se acordă de puncte pentru ;
- Testul 13 este exemplul așa că nu este punctat.
- Datorită volumului mare de date citite și scrise, folosiți fișierul de parsing de la atașamente din dreapta ecranului.
Exemplu
algoritmul.in
6
3 4 1 6 2 5
algoritmul.out
3 3
3 4
1 1
6 6
1 4
1 6
Explicație
După cum se vede, inițial bitul de pe poziția este transformat, 001000
, deci secvența de care aparține este formată din el și persoana sa. După se transformă bitul , 001100
, deci secvența lui începe la și se termină la . După se transformă primul bit, dar este singur deci este propria lui secvență, deci se afișează și . Tot așa până terminăm cu bitul unde toți biții sunt legați deci secvența este chiar tot șirul deci startul este și finalul .