Fie un vector sortat crescător cu elemente naturale nenule distincte pe care nu le cunoaştem, dar pe care ne propunem să le determinăm. Având la dispoziţie acest vector , cu ajutorul algoritmului de căutare binară prezentat în poza alăturată putem răspunde la query-uri de forma:
- Dându-se un număr şi un interval se cere să se determine cel mai mic element mai mare decât aflat în intervalul determinat de indicii şi , interval din vectorul .
Se cunosc paşii pe care algoritmul de căutare binară i-a urmat pentru diferite valori ale tripletului .
Cerință
Dându-se (lungimea vectorului), (numărul de query-uri apelate) şi cele query-uri, să se determine vectorul iniţial. Dacă există mai multe soluţii se va afişa soluţia minim lexicografică. Dacă nu există soluţie se va afişa valoarea . Un vector se consideră mai mic lexicografic decât un alt vector dacă există un indice astfel încât: , , , şi .
Cele query-uri sunt formate din:
- care reprezintă valoarea pe care o căutăm binar în vector
- care reprezintă numărul de iteraţii în algoritmul de căutare binară
- reprezentând intervalul în care se aplică algoritmul de cautare binară (perechea este considerată prima iteraţie în algoritm)
- perechi de indici reprezentând valorile afişate de algoritmul de căutare binară în urma fiecărei iteraţii
Date de intrare
Fişierul de intrare bsrec.in
conţine pe prima linie o valoare reprezentând numărul de teste ce vor fi efectuate. Pentru fiecare din cele teste se va citi de pe prima linie valoarea (numărul de elemente ale vectorului), respectiv (numărul de query-uri), despărţite prin câte un spaţiu.
Următoarele linii descriu cele query-uri. În cadrul unui query, prima linie va conţine o pereche de numere despărţite printr-un spaţiu, unde reprezintă valoarea căutată în vector, iar numărul de paşi efectuaţi în căutarea binară a celei mai mici valori din vector care este mai mare decât . Pe următoarea linie a query-ului se găseşte perechea de valori având semnificaţia de mai sus. Următoarele linii conţin perechi de valori naturale despărţite prin câte un spaţiu care reprezintă indicii stânga, respectiv dreapta ce sunt afişaţi în urma fiecărei iteraţii a algoritmului de mai sus.
Date de ieșire
Fişierul de ieșire bsrec.out
va conţine linii, linia conţinând răspunsul pentru testul . Dacă testul admite soluţie, se vor afişa numere naturale nenule strict crescătoare ce vor reprezenta valorile vectorului . Deoarece există mai multe soluţii, se va afişa soluţia minim lexicografică. Dacă testul NU admite soluţie, se va afişa valoarea .
Restricții și precizări
- , cu excepţia ultimei perechi din căutarea binară unde .
- Pentru din punctajul total există teste cu şi soluţia minim lexicografică admite valori până în .
- Se garantează că .
Exemplu
bsrec.in
2
5 3
3 4
1 5
1 2
2 2
2 1
30 3
2 4
4 4
5 4
25 2
4 5
4 3
5 3
30 4
1 5
1 2
2 2
2 1
3 3
2 4
4 4
5 4
5 2
4 5
4 3
bsrec.out
1 3 4 25 26
-1
Explicație
Fişierul conţine teste.
Primul test are query-uri:
- Primul query caută binar valoarea în intervalul şi face iteraţii;
- Cel de-al doilea query caută binar valoarea pe intervalul şi face iteraţii;
- Cel de-al treilea query caută binar valoarea pe intervalul şi face iteraţii.
Cel de al doilea test are query-uri, dar NU admite soluţie.