Se consideră un şir de elemente care sunt numere întregi. Se definesc noţiunile:
- platou ca fiind o secvenţă de elemente egale aflate în vector în poziţii consecutive;
- lungimea unui platou ca fiind numărul de elemente care alcătuiesc un platoul.
Se ştie că în şirul considerat, lungimea maximă a unui platou este şi că există cel puţin un platou care are această lungime. Amplasarea unui platou este determinată de poziţia cea mai mică şi de poziţia cea mai mare dintre poziţiile elementelor care alcătuiesc platoul.
Cerinţă
Să se scrie un program care determină amplasarea unui platou de lungime în şirul considerat. Dumneavoastră nu cunoaşteţi şirul. Determinarea amplasării platoului se face adresând întrebări comisiei. O întrebare constă în a preciza două poziţii din şir, fie acestea şi . Comisia vă dă un răspuns care reprezintă lungimea cea mai mare a unui platou din şir aflat între poziţiile şi .
Interacţiune
Programul vostru nu va citi sau scrie din/în niciun fişier și nu va implementa funcția main. În schimb, va avea de implementat funcția
std::pair<int, int> solve();
ce va returna o pereche unde şi reprezintă poziţiile ce determină amplasarea unui platou de lungime din şir.
Pentru a afla detalii despre șirul considerat puteți apela funcția
int ask(int p1, int p2);
unde , reprezintă poziţiile pentru care faceţi interogarea și funcția returnează o valoare care reprezintă lungimea cea mai mare a unui platou aflat între poziţiile şi .
Restricții și precizări
- Poziţiile din şir sunt numerotate de la la .
- Fișierul
platou.h
trebuie inclus - Se garantează că veți primi răspunul la de întrebări fără a ieși din limita de timp
Punctaj
Programul vostru obţine puncte la un test dacă:
- utilizează mai mult de interogări;
- interoghează cu poziţii incorecte: poziţii mai mici decât sau mai mari decât sau prima poziţie e mai mare strict decât a doua poziţie.
- returnează un răspuns greșit
Altfel, programul vostru obţine pentru un punctaj care depinde de numărul de întrebări după cum urmează :
- pentru cel mult întrebări obţine din punctaj;
- pentru un număr de întrebări cuprins între şi obţine din punctaj;
- pentru un număr de întrebări cuprins între şi obţine din punctaj.
Exemplu
- Se apelează
ask(1, 8192)
, interoghez lungimea maximă a unui platou întâlnită între poziţiile şi - Funcția returnează , semnificând că lungimea maximă este .
solve
returnează , deoarece știm că un platou cu lungime de se află între poziţiile şi