Pagini recente » Cod sursa (job #1726558) | Cod sursa (job #2791421) | Cod sursa (job #2973089) | Cod sursa (job #2337649) | Cod sursa (job #1463956)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int v[100001], N;
int maxPozEgal(int x) {
int mijloc, stanga = 1, dreapta = N;
while (stanga <= dreapta) {
mijloc = (stanga + dreapta) / 2;
if (v[mijloc] <= x) {
stanga = mijloc + 1;
}
else {
dreapta = mijloc - 1;
}
}
if (v[dreapta] == x) {
return dreapta;
}
return -1;
}
int maxPozMaiMicEgal(int x) {
int mijloc, stanga = 1, dreapta = N;
while (stanga <= dreapta) {
mijloc = (stanga + dreapta) / 2;
if (v[mijloc] <= x) {
stanga = mijloc + 1;
}
else {
dreapta = mijloc - 1;
}
}
return dreapta;
}
int minPozMaiMareEgal(int x) {
int mijloc, stanga = 1, dreapta = N;
while (stanga <= dreapta) {
mijloc = (stanga + dreapta) / 2;
if (v[mijloc] < x) {
stanga = mijloc + 1;
}
else {
dreapta = mijloc - 1;
}
}
return stanga;
}
int main() {
int mijloc, stanga, dreapta, i, M, x, t;
fin >> N;
for (i = 1; i <= N; i++) {
fin >> v[i];
}
fin >> M;
for (i = 1; i <= M; i++) {
fin >> t >> x;
if (t == 0) {
fout << maxPozEgal(x) << "\n";
}
if (t == 1) {
fout << maxPozMaiMicEgal(x) << "\n";
}
if (t == 2) {
fout << minPozMaiMareEgal(x) << "\n";
}
}
return 0;
}