Pagini recente » Cod sursa (job #1754723) | Cod sursa (job #1139525) | Cod sursa (job #2735275) | Cod sursa (job #613887) | Cod sursa (job #3292700)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int cautBin(int v[], int x, int st, int dr, int tip) {
while (st <= dr) {
int mid = (st + dr) / 2;
if (v[mid] < x) {
st = mid + 1;
if (tip == 1 && v[mid] <= x && v[mid + 1] > x)
return mid;
}
else if (v[mid] > x) {
dr = mid - 1;
if (tip == 2 && v[mid] >= x && v[mid - 1] < x)
return mid;
}
else if (v[mid] == x) {
if (tip == 0 || tip == 1) {
while (v[mid] == x) {
mid ++;
}
return (mid - 1);
}
if (tip == 2) {
while (v[mid] == x) {
mid --;
}
return (mid + 1);
}
}
}
return -1;
}
int main() {
int m, n, v[100000], tip, x;
fin >> n;
for (int i = 1; i <= n; i++)
fin >> v[i];
fin >> m;
for (int i = 1; i <= m; i++) {
fin >> tip >> x;
cout<< cautBin(v, x, 1, n, tip) << endl;
}
}