Cod sursa(job #1827009)
Utilizator | Data | 11 decembrie 2016 12:36:31 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.58 kb |
#include <fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int n,i,m,q,x,v[100001],st,dr,mid,sol;
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
cin>>m;
while(m!=0){
m--;
cin>>q>>x;
if(q==0){
st=1; dr=n; sol=-1;
while(st<=dr){
mid=(st+dr)/2;
if(x==v[mid]){
while(v[mid]==x&&mid<=n)
mid++;
sol=mid-1;
break;
}
else{
if(x<v[mid])
dr=mid-1;
else
st=mid+1;
}
}
cout<<sol<<'\n';
continue;
}
if(q==1){
st=1; dr=n; sol=-1;
while(st<=dr){
mid=(st+dr)/2;
if(x<v[mid])
dr=mid-1;
else
if(x>=v[mid]){
sol=mid;
st=mid+1;
}
}
cout<<sol<<'\n';
continue;
}
if(q==2){
st=1; dr=n; sol=-1;
while(st<=dr){
mid=(st+dr)/2;
if(x>v[mid])
st=mid+1;
else
if(x<=v[mid]){
sol=mid;
dr=mid-1;
}
}
cout<<sol<<'\n';
}
}
return 0;
}