Data je matrica \(\mathbf{A}\) dimenzija \(n \times m\) u kojoj su sve vrste i sve kolone sortirane neopadajuće (mogući su duplikati). Za zadatu vrednost \(x\) proveriti da li se \(x\) pojavljuje u matrici, i ispisati koordinate (red, kolona) njene leksikografski prve pojave (sa najmanjim indeksom reda, a u tom redu sa najmanjim indeksom kolone).
Sa standardnog ulaza se unose dimenzije matrice \(n\) i \(m\) (\(1 \leq n, m \leq 1000\)) i broj upita \(q\) (\(1 \leq q \leq 10^6\)). Zatim, u narednih \(n\) redova unosi se po \(m\) celih brojeva \(\mathbf{A}_{i, j}\) (\(10^5 < \mathbf{A}_{i, j} < 10^5, 1 \leq i \leq n, 1 \leq j \leq n\)). Nakon toga, unosi se \(q\) traženih celih brojeva \(x_k\) (\(-10^5 < x_k < 10^5, 1 \leq k \leq q\)).
Na standardni izlaz, za svaki upit \(x_k\), ispisati koordinate leksikografski
prvog pojavljivanja broja \(x_k\),
ukoliko se broj \(x_k\) ne pojavljuje u
matrici \(\mathbf{A}\) ispisati
-1
.
3 4 3 1 2 4 7 2 4 4 8 3 5 9 10 4 5 2
1 3 3 2 1 2
Vrednost 4 se prvi put javlja u redu 1 i koloni 3. Vrednost 5 se jedino javlja u redu 3 i koloni 2. Vrednost 2 se prvi put javlja u redu 1 i koloni 2.
2 3 2 -1 0 1 2 3 5 6 0
-1 1 2
Vrednost 6 se ne nalazi u matrici. Vrednost 0 se jedino javlja u redu 1 i koloni 2.
U ovom bloku se opisuje glavno rešenje zadatka.
#include <iostream>
#include <vector>
using namespace std;
void max_coord(const vector<vector<int>> &A, const int x)
{
int n = A.size(), m = A[0].size();
int i = 0, j = m - 1;
int row = -1, col = -1;
bool found = false;
while (i < n && j >= 0) {
if (A[i][j] < x) {
++;
iif (found) break;
} else if (A[i][j] > x) {
--;
j} else { // A[i][j] = x
= true;
found = i;
row = j--;
col }
}
if (found) {
<< row + 1 << " " << col + 1 << endl;
cout } else {
<< -1 << endl;
cout }
}
int main()
{
int n, m, q; cin >> n >> m >> q;
<vector<int>> A(n, vector<int>(m));
vectorfor (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
>> A[i][j];
cin }
}
while (q--) {
int x; cin >> x;
(A, x);
max_coord}
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
void max_coord(const vector<vector<int>> &A, const int x)
{
int n = A.size(), m = A[0].size();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (A[i][j] == x) {
<< i + 1 << " " << j + 1 << endl;
cout return;
}
}
}
<< -1 << endl;
cout }
int main()
{
int n, m, q; cin >> n >> m >> q;
<vector<int>> A(n, vector<int>(m));
vectorfor (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
>> A[i][j];
cin }
}
while (q--) {
int x; cin >> x;
(A, x);
max_coord}
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
void max_coord(const vector<vector<int>> &A, const int x)
{
int n = A.size();
for (int i = 0; i < n; i++) {
auto it = lower_bound(A[i].begin(), A[i].end(), x);
if (it != A[i].end() && *it == x) {
int j = it - A[i].begin();
<< i + 1 << " " << j + 1 << endl;
cout return;
}
}
<< -1 << endl;
cout }
int main()
{
int n, m, q; cin >> n >> m >> q;
<vector<int>> A(n, vector<int>(m));
vectorfor (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
>> A[i][j];
cin }
}
while (q--) {
int x; cin >> x;
(A, x);
max_coord}
return 0;
}