Pagini recente » Cod sursa (job #1133012) | Cod sursa (job #3246440) | Cod sursa (job #2354818) | Cod sursa (job #892496) | Cod sursa (job #2047591)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
const int NMax = 1e5 + 5;
int binary_search_0_1(int A[], int N, int val)
{
int i, step;
for (step = 1; step < N; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step < N && A[i + step] <= val)
i += step;
return i;
}
int binary_search_2(int A[], int N, int val)
{
int i, step;
for (step = 1; step < N; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step < N && A[i + step] < val)
i += step;
return i;
}
int main()
{
int N, A[NMax];
f >> N;
for(int i = 0; i < N; ++i) {
f >> A[i];
}
int M;
f >> M;
for(int i = 1; i <= M; ++i) {
int interogare, x;
f >> interogare >> x;
if(interogare == 0) {
int poz = binary_search_0_1(A, N, x);
if(poz == N -1) {
if(A[N - 1] != x) {
g << -1 << '\n';
}
else {
g << poz + 1 << '\n';
}
}
else {
if(poz == 0) {
if(A[0] != x) {
g << -1 << '\n';
}
else {
g << poz + 1 << '\n';
}
}
else {
if(A[poz] == x) {
g << poz + 1 << '\n';
}
else {
g << -1 << '\n';
}
}
}
}
if(interogare == 1) {
int poz = binary_search_0_1(A, N, x);
//if(A[poz] <= x) {
g << poz + 1 << '\n';
//}
}
if(interogare == 2) {
int poz = binary_search_2(A, N, x);
if(poz == 0) {
if(A[0] >= x) {
g << poz + 1 << '\n';
}
else {
g << poz + 2 << '\n';
}
}
else {
g << poz + 2 << '\n';
}
}
}
return 0;
}