Pagini recente » Cod sursa (job #2793830) | Cod sursa (job #2808135) | Cod sursa (job #2598551) | Cod sursa (job #1935473) | Cod sursa (job #1081693)
#include <fstream>
#define nmax 1000
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int n,v[nmax];
int bin_search0(int left, int right, int x)
{
int piv=(left+right)/2;
if(left==right)
{
if(v[left]==x) return piv;
else return -1;
}
else
{
if(x>=v[piv+1]) return bin_search0(piv+1, right, x);
if(x>v[piv]) return -1;
if(x==v[piv]) return piv;
if(piv-1>=left)
return bin_search0(left, piv-1, x);
return -1;
}
}
int bin_search1(int left, int right, int x)
{
int piv=(left+right)/2;
if (left==right)
return piv;
if(x>=v[piv+1]) return bin_search1(piv+1,right,x);
if(x>v[piv]) return piv;
return bin_search1(left, piv-1, x);
}
int bin_search2(int left, int right, int x)
{
int piv=(left+right)/2;
if(x<=v[piv-1])
return bin_search2(left, piv-1, x);
if(x<=v[piv])
return piv;
return bin_search2(piv+1, right, x);
}
int main()
{
int m,i,c,x;
cin>>n;
for(i=0; i<n; i++)
cin>>v[i];
cin>>m;
for(i=1; i<=m; i++)
{
cin>>c>>x;
if(c==0)
cout<<bin_search0(1,n,x)<<'\n';
else
if(c==1)
cout<<bin_search1(1,n,x)<<'\n';
else
if(c==2)
cout<<bin_search2(1,n,x)<<'\n';
}
return 0;
}