Pagini recente » Cod sursa (job #312667) | Cod sursa (job #279157) | Cod sursa (job #2241906) | Cod sursa (job #97954) | Cod sursa (job #790857)
Cod sursa(job #790857)
//
// main.cpp
// CautareBinara
//
// Created by Ioana Teoc on 9/21/12.
// Copyright (c) 2012 Ioana Teoc. All rights reserved.
//
#include <iostream>
#include<stdio.h>
using namespace std;
#define maxn 100005
int n, V[maxn];
int search(int x){
int i = 0, step;
for(step = 1; step*2 < n; step <<= 1);
for(i = 0; step; step >>= 1 ){
if(step + i <= n && V[step + i] <= x)
i += step;
}
return i;
}
int main()
{
int m, op, x, pos;
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <=n; i++){
scanf("%d", &V[i]);
}
cin >> m;
for(int i=1; i<=m; i++){
scanf("%d", &op);
scanf("%d", &x);
pos = search(x);
if(op == 0){
if(V[pos] != x){
printf("%d\n", -1);
continue;
}
printf("%d\n", pos);
}
else if(op == 1){
if(V[pos] <= x){
printf("%d\n", pos);
continue;
}
// if(V[pos] > x){
// cout << pos - 1 << endl;
// continue;
// }
}
else if(op == 2){
if(V[pos] < x){
printf("%d\n", pos + 1);
continue;
}
if(V[pos] > x){
printf("%d\n", pos);
continue;
}
while(V[pos - 1] == x)
pos--;
printf("%d\n", pos);
}
}
}