matrice

Time limit: 0.05s Memory limit: 32MB Input: Output:

Se consideră o matrice AA cu NN linii şi NN coloane cu elemente distincte din mulţimea {0,1,,N21} \{0, 1 , \dots, N^2-1 \}. Liniile şi respectiv coloanele sunt numerotate de la 00 la N1N-1.

Vom nota cu colmax(i)colmax(i) coloana pe care se află elementul maxim pe linia ii a matricei. Spunem că matricea AA este monotonă dacă pentru orice i1<i2i_1<i_2, colmax(i1)colmax(i2)colmax(i_1) \leq colmax(i_2).

Fie L={L1,L2,,Lk}L= \{ L_1, L_2, \dots, L_k \} o submulţime de linii ale matricei, iar C={C1,C2,,Cp}C= \{ C_1, C_2, \dots, C_p \} o submulţime de coloane. O submatrice a matricei AA este formată din elementele Ai,jA_{i, j}, unde iLi \in L, iar jCj \in C.

Spunem că matricea AA este total monotonă dacă orice submatrice a ei este monotonă.
De exemplu, matricea din figura 11 este total monotonă, valorile maxime de pe fiecare linie fiind îngroşate. Matricea din figura 22 nu este total monotonă (am haşurat elementele unei submatrice care nu e monotonă).

Cerinţă

Se consideră o matrice total monotonă cu NN linii şi NN coloane care conţine valori distincte din mulţimea {0,1,,N21} \{0, 1 , \dots, N^2-1 \}. Se cere să se determine pentru fiecare linie a matricei coloana pe care se află elementul maxim.

Interacţiune

Programul vostru nu va citi şi nu va scrie nimic. În schimb, va implementa funcția

std::vector<int> solve(int N);

ce primește ca parametru numǎrul natural NN, reprezentând dimensiunea matricei, și care returnează un vector (indexat de la 00) ce va conține, în ordine, coloanele pe care se află valorile maxime de pe liniile 0,1,,N10, 1, \dots, N-1.

În interioriul funcției solve, puteți apela funcția

int query(int lin, int col);

ce va returna valoarea care se află în matrice pe linia linlin şi coloana colcol.

Restricții și precizări

  • 1N1001 \leq N \leq 100;
  • Dacă programul vostru va efectua cel mult 6N6 \cdot N interogări va primi punctajul maxim pe testul respectiv.
  • Dacă programul vostru va efectua mai mult de 6N6 \cdot N interogări, dar nu mai mult de 10N10 \cdot N interogări, atunci veţi primi 50%50\% din punctajul testului respectiv
  • Dacă programul vostru ajunge la rezultatul corect, dar foloseşte mai mult de 10N10 \cdot N interogări, atunci veţi primi 20%20\% din punctajul testului respectiv.
  • Dacă programul vostru nu ajunge la răspunsul corect sau nu interacţionează corespunzător cu programul comisiei veţi primi 00 puncte pe testul respectiv.
  • Trebuie să includeți fișierul matrix.h.

Exemplu de interacţiune

Se apelează solve(2).
În solve se apelează query(0, 0), care returnează 33.
În solve se apelează query(1, 1), care returnează 22.
Funcția solve returnează {0,1}\{0, 1\}.

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