Cod sursa(job #2462395)
Utilizator | Data | 27 septembrie 2019 11:19:53 | |
---|---|---|---|
Problema | Cautare binara | Scor | 40 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.53 kb |
#include <iostream>
#include <fstream>
using namespace std;
int v[100001];
int main()
{
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,m,dr,st,mid,i=0,tip,x,a;
fin>>n;
for(i=1;i<=n;i++){
fin>>v[i];
}
fin>>m;
for(i=1;i<=m;i++){
fin>>tip>>x;
switch (tip){
case 0:
st=1;
dr=n;
while(st<=dr){
int mid=(st+dr)/2;
if(v[mid]<=x){
st=mid+1;
}else{
dr=mid-1;
}
}
if(dr>0&&v[dr]==x){
fout<<dr<<endl;
}else{
fout<<"-1"<<endl;
}
break;
case 1:
st=1;
dr=n;
while(st<=dr){
int mid=(st+dr)/2;
if(v[mid]<=x){
st=mid+1;
}else{
dr=mid-1;
}
}
fout<<dr<<endl;
break;
case 2:
st=1;
dr=n;
while(st<=dr){
int mid=(st+dr)/2;
if(v[mid]<x){
st=mid+1;
}else{
dr=mid-1;
}
}
fout<<st<<endl;
break;
}
}
return 0;
}