Se consideră un număr întreg pozitiv şi . La un turneu participă concurenţi numerotaţi de la la . Pentru fiecare concurent este cunoscută puterea acestuia . Puterile sunt numere întregi pozitive distincte şi strict mai mici decât . Cu alte cuvinte şirul este o permutare a numerelor întregi de la la . Un meci între doi concurenţi este câştigat de jucătorul care are putere mai mare.
În primul tur al turneului se desfăşoară meciuri după cum urmează: primul meci este între concurenţii şi , al doilea meci între concurenţii şi , ş.a.m.d , al -lea meci este între concurenţii şi . Ultimul meci din primul tur va fi între jucătorii şi .
Începând cu al doilea tur meciurile se vor desfăşura astfel: primul meci va fi între câştigătorii din primele două meciuri din turul anterior, al doilea meci între câştigătorii următoarelor două meciuri, ş.a.m.d. astfel că ultimul meci va fi între câştigătorii ultimelor două meciuri din turul anterior. Turneul va continua până va fi desemnat câştigătorul turneului.
Cerință
Să ne imaginăm următorul scenariu: sunteţi concurentul cu puterea şi aţi vrea să câştigaţi cât mai multe meciuri în turneu. Pentru a atinge acest scop aveţi dreptul să faceţi un număr de cel mult intershimbări între participanţii la turneu. La o interschimbare poziţiile celor doi jucători în tabloul iniţial al meciurilor din primul tur se schimbă între ele.
După efectuarea a cel mult interschimbări turneul începe şi se supune regulilor descrise mai sus, dar datorită modificărilor este posibil ca la unele dintre meciuri câştigătorii să fie diferiţi.
În această problemă va trebui să implementaţi două funcţii.
void init (int N, int *p)
Această funcţie va fi apelată de graderul comisiei o singură dată. Acest apel va trimite prin intermediul parametrului valoarea cu semnificaţia din enunţ iar prin intermediul parametrului adresa de început a unui vector de numere întregi conţinând puterile celor concurenţi.
int query (int x, int y)
Această funcţie va fi apelată de mai multe ori în graderul comisiei după unicul apel al funcţiei init. Funcţia va trebui să rezolve un scenariu de tipul celui descris mai sus. Prin intermediul parametrului funcţia primeşte puterea unui concurent şi prin intermediul parametrului un număr maxim de interschimbări permise şi trebuie să returneze numărul maxim de meciuri pe care l-ar putea câştiga jucătorul cu puterea dacă face într-un mod convenabil cel mult interschimbări în tabloul iniţial.
ATENŢIE: Un jucător poate fi schimbat cu oricare alt jucător – inclusiv jucătorul cu puterea .
Restricții și precizări
- pentru fiecare apel al funcţiei
query
- funcţia
query
va fi apelată de graderul comisiei de cel mult ori. - Pentru puncte , numărul apelurilor a functiei
query
- Pentru alte de puncte , valorile ale query-urilor sunt date în ordine crescătoare
- Pentru alte puncte
- Pentru alte puncte
- Pentru restul de de puncte
- Pointerul primit în funcția
init
poate fi folosit în orice fel (inclusiv modificată memoria)
Exemplu
Actiune grader
init( 4,{3,2,0,1})
query (1,0)
query (0,2)
query (3,1)
query (2,2)
Efect
1
0
2
1
Explicatie
La turneu participă jucători: Jucătorul are putere , Jucătorul are putere , Jucătorul are putere , Jucătorul are putere .
Pentru primul query, nu este permisă nicio interschimbare. În primul tur jucătorul cu puterea câştigă meciul împotriva jucătorului cu puterea . În al doilea tur jucătorul cu puterea pierde în faţa jucătorului cu puterea .
Pentru cel de-al doilea query, sunt permise interschimbări. Indiferent de numărul de interschimbări efectuate jucătorul cu puterea va pierde din primul tur deoarece are cea mai mică putere din tot turneul.
Pentru cel de-al treilea query, o singură interschimbare este permisă. Indiferent de numărul de interschimbări jucătorul cu puterea va câştiga orice meci deoarece are cea mai mare putere. Astfel după ce câştigă primul meci cu unul dintre adversari, va câştiga meciul cu câştigătorul meciului dintre ceilalţi doi devenind astfel şi câştigătorul turneului.
Exemplul 2
Actiune grader
init( 8,{2,7,3,0,1,4,6,5})
query (3,1)
query (3,0)
query (1,5)
query (4,7)
query (7,7)
Efect
2
1
1
2
3