Pagini recente » Cod sursa (job #1670864) | Cod sursa (job #1352487) | Cod sursa (job #1491043) | Cod sursa (job #1061776) | Cod sursa (job #2018706)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,a[100005],m;
int CautBin0(int st, int dr, int x)
{
int mj,p;
if (x<a[st]) return -1;
if (x>a[dr]) return -1;
p=-1;
while(st<=dr)
{
mj=(st+dr)/2;
if (x==a[mj])
{
p=mj;
st=mj+1;
}
else if (x<a[mj]) dr=mj-1;
else st=mj+1;
}
return p;
}
int CautBin1(int st, int dr, int x)
{
int mj,p;
p=-1;
while(st<=dr)
{
mj=(st+dr)/2;
if (a[mj]<=x)
{
p=mj;
st=mj+1;
}
else dr=mj-1;
}
return p;
}
int CautBin2(int st, int dr, int x)
{
int mj,p;
p=-1;
while(st<=dr)
{
mj=(st+dr)/2;
if (a[mj]>=x)
{
p=mj;
dr=mj-1;
}
else st=mj+1;
}
return p;
}
int main()
{
int i,val,x;
fin>>n;
for (i=1;i<=n;i++)
fin>>a[i];
fin>>m;
for (i=1;i<=m;i++)
{
fin>>val>>x;
if (val==0) fout<<CautBin0(1,n,x)<<"\n";
else if (val==1) fout<<CautBin1(1,n,x)<<"\n";
else fout<<CautBin2(1,n,x)<<"\n";
}
fin.close();
fout.close();
return 0;
}