Nu aveti permisiuni pentru a descarca fisierul grader_test1.in
Cod sursa(job #3324390)
| Utilizator | Data | 22 noiembrie 2025 10:27:59 | |
|---|---|---|---|
| Problema | Cautare binara | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.7 kb |
// Programul raspunde la interogari prin cautari binare asupra unui sir ordonat (indexare 1-based)
#include <bits/stdc++.h>
using namespace std;
int v[100010];
int n, m;
// TIP 0: ultima pozitie unde v[mid] == key sau -1
int bsearch0(int p, int u, int key) {
int rasp = -1, mid;
while (p <= u) {
mid = p + (u - p) / 2;
if (v[mid] == key) {
rasp = mid;
p = mid + 1; // cautam mai la dreapta
} else if (v[mid] < key) {
p = mid + 1;
} else {
u = mid - 1;
}
}
return rasp; // -1 dacă nu există
}
// TIP 1: ultima pozitie unde v[mid] <= key (exista garantat)
int bsearch1(int p, int u, int key) {
int rasp = p, mid;
while (p <= u) {
mid = p + (u - p) / 2;
if (v[mid] <= key) {
rasp = mid;
p = mid + 1;
} else {
u = mid - 1;
}
}
return rasp;
}
// TIP 2: prima pozitie unde v[mid] >= key (exista garantat)
int bsearch2(int p, int u, int key) {
int rasp = u, mid;
while (p <= u) {
mid = p + (u - p) / 2;
if (v[mid] >= key) {
rasp = mid;
u = mid - 1;
} else {
p = mid + 1;
}
}
return rasp;
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> v[i];
cin >> m;
while (m--) {
int tip, val;
cin >> tip >> val;
if (tip == 0)
cout << bsearch0(1, n, val) << "\n";
else if (tip == 1)
cout << bsearch1(1, n, val) << "\n";
else
cout << bsearch2(1, n, val) << "\n";
}
return 0;
}
