bsrec

Time limit: 0.1s Memory limit: 128MB Input: bsrec.in Output: bsrec.out

Fie un vector vv sortat crescător cu NN 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 vv, 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 XX şi un interval [a,b][a, b] se cere să se determine cel mai mic element mai mare decât XX aflat în intervalul determinat de indicii aa şi bb, interval din vectorul vv.

Se cunosc paşii pe care algoritmul de căutare binară i-a urmat pentru diferite valori ale tripletului (X,a,b)(X, a, b).

Cerință

Dându-se NN (lungimea vectorului), QQ (numărul de query-uri apelate) şi cele QQ 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 1-1. Un vector V1V_1 se consideră mai mic lexicografic decât un alt vector V2V_2 dacă există un indice ii astfel încât: V1[1]=V2[1]V_1[1] = V_2[1], V1[2]=V2[2]V_1[2] = V_2[2], \dots, V1[i1]=V2[i1]V_1[i-1] = V_2[i-1] şi V1[i]<V2[i]V_1[i] < V_2[i].

Cele QQ query-uri sunt formate din:

  • XX care reprezintă valoarea pe care o căutăm binar în vector
  • MM care reprezintă numărul de iteraţii în algoritmul de căutare binară
  • [a,b][a, b] reprezentând intervalul în care se aplică algoritmul de cautare binară (perechea (a,b)(a, b) este considerată prima iteraţie în algoritm)
  • M1M-1 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 TT reprezentând numărul de teste ce vor fi efectuate. Pentru fiecare din cele TT teste se va citi de pe prima linie valoarea NN (numărul de elemente ale vectorului), respectiv QQ (numărul de query-uri), despărţite prin câte un spaţiu.
Următoarele linii descriu cele QQ query-uri. În cadrul unui query, prima linie va conţine o pereche de numere (X,M)(X, M) despărţite printr-un spaţiu, unde XX reprezintă valoarea căutată în vector, iar MM numărul de paşi efectuaţi în căutarea binară a celei mai mici valori din vector care este mai mare decât XX. Pe următoarea linie a query-ului se găseşte perechea de valori (a,b)(a, b) având semnificaţia de mai sus. Următoarele M1M-1 linii conţin perechi (st,dr)(st, dr) 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 TT linii, linia ii conţinând răspunsul pentru testul ii. Dacă testul admite soluţie, se vor afişa NN numere naturale nenule strict crescătoare ce vor reprezenta valorile vectorului vv. 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 1-1.

Restricții și precizări

  • 1T101 \leq T \leq 10
  • 1N,Q1 0001 \leq N,Q \leq 1 \ 000
  • 1X1091 \leq X ≤ 10^9
  • 1stdrN1 \leq st \leq dr \leq N, cu excepţia ultimei perechi din căutarea binară unde st>drst > dr.
  • Pentru 20%20\% din punctajul total există teste cu 1N,Q101 \leq N, Q \leq 10 şi soluţia minim lexicografică admite valori până în 2020.
  • Se garantează că M15M \leq 15.

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 22 teste.

Primul test are 33 query-uri:

  • Primul query caută binar valoarea 33 în intervalul [1,5][1, 5] şi face 44 iteraţii;
  • Cel de-al doilea query caută binar valoarea 3030 pe intervalul [2,4][2, 4] şi face 33 iteraţii;
  • Cel de-al treilea query caută binar valoarea 2525 pe intervalul [4,5][4, 5] şi face 22 iteraţii.

Cel de al doilea test are 33 query-uri, dar NU admite soluţie.

Log in or sign up to be able to send submissions!