Cod sursa(job #1891430)
Utilizator | Data | 24 februarie 2017 00:08:20 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.74 kb |
#include <fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int A[100010];
int main()
{
int n;
cin>>n;
for (int i=1; i<=n; i++){
cin>>A[i];
}
int m;
cin>>m;
for (int k=1; k<=m; k++){
int tip;
cin>>tip;
if (tip==0){
int x;
cin>>x;
int st=1;
int dr=n;
int y;
while (st<=dr){
int mij=(st+dr)/2;
if (A[mij]>x){
dr=mij-1;
}
if (A[mij]<=x){
st=mij+1;
y=mij;
}
}
if (A[y]==x){
cout<<y<<'\n';
}
else{
cout<<-1<<'\n';
}
}
if (tip==1){
int x;
cin>>x;
int st=1;
int dr=n;
int y;
while (st<=dr){
int mij=(st+dr)/2;
if (A[mij]>x){
dr=mij-1;
}
if (A[mij]<=x){
st=mij+1;
y=mij;
}
}
cout<<y<<'\n';
}
if (tip==2){
int x;
cin>>x;
int st=1;
int dr=n;
int y;
while (st<=dr){
int mij=(st+dr)/2;
if (A[mij]>=x){
dr=mij-1;
y=mij;
}
if (A[mij]<x){
st=mij+1;
}
}
cout<<y<<'\n';
}
}
return 0;
}