Pagini recente » Cod sursa (job #768966) | Cod sursa (job #1693061) | Cod sursa (job #434419) | Cod sursa (job #2556428) | Cod sursa (job #2431186)
//ALEX ENACHE
#include <algorithm>
using namespace std;
//#include <iostream>
#include <fstream>
ifstream cin ("cautbin.in");ofstream cout ("cautbin.out");
int v[100005];
int n;
int q_1 (int x){
int st = 1;
int dr = n;
int ans = 0;
while (st <= dr){
int mij = st + dr;
mij /= 2;
if (v[mij] <= x){
ans = mij;
st = mij + 1;
}
else{
dr = mij - 1;
}
}
return ans;
}
int q_2 (int x){
int st = 1;
int dr = n;
int ans = 0;
while (st <= dr){
int mij = st + dr;
mij /= 2;
if (v[mij] >= x){
ans = mij;
dr = mij - 1;
}
else{
st = mij + 1;
}
}
return ans;
}
int main() {
//freopen("input", "r", stdin);freopen("output", "w", stdout);
cin>>n;
for (int i=1; i<=n; i++){
cin>>v[i];
}
int m;
cin>>m;
for (int i=1; i<=m; i++){
int tip , x;
cin>>tip>>x;
if (tip == 0){
//caut cea mai din dr poz a.i. v[poz] = x, altfel afiseaza -1
//0 -> 1 (cu conditia sa existe)
int ans = q_1(x);
if (v[ans] != x){
cout<<-1<<'\n';
}
else{
cout<<ans<<'\n';
}
}
if (tip == 1){
//caut cea mai din dr poz a.i. v[poz] <= x
cout<<q_1(x)<<'\n';
}
if (tip == 2){
//caut cea mai din st poz a.i. v[poz] >= x
cout<<q_2(x)<<'\n';
}
}
return 0;
}