Pagini recente » Cod sursa (job #1360529) | Cod sursa (job #979074) | Cod sursa (job #434937) | Cod sursa (job #718554) | Cod sursa (job #790894)
Cod sursa(job #790894)
//
// 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 < 2){
if(op == 0 && V[pos] != x){
printf("%d\n", -1);
} else
printf("%d\n", pos);
}
else if(op == 2){
if(V[pos] < x){
printf("%d\n", pos + 1);
continue;
}
while(V[pos - 1] == x)
pos--;
printf("%d\n", pos);
}
}
}