Pagini recente » Cod sursa (job #194162) | Cod sursa (job #280640) | Cod sursa (job #393051) | Istoria paginii runda/oji_1/clasament | Cod sursa (job #1915108)
#include <bits/stdc++.h>
#define nmax 100005
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int a[nmax],n,m;
void Citire()
{
int i;
fin>>n;
for(i=1; i<=n; i++)
fin>>a[i];
}
inline int Caut_Bin1(int x)
{
int st=1,dr=n,poz=-1,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(a[mij]==x)
{
poz=mij;
st=mij+1;
}
else if(a[mij]<x)
st=mij+1;
else dr=mij-1;
}
return poz;
}
inline int Caut_Bin2(int x)
{
int st=1,dr=n,poz=-1,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(a[mij]<=x)
{
poz=mij;
st=mij+1;
}
else dr=mij-1;
}
return poz;
}
inline int Caut_Bin3(int x)
{
int st=1,dr=n,poz=-1,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(a[mij]>=x)
{
poz=mij;
dr=mij-1;
}
else st=mij+1;
}
return poz;
}
void Rezolvare()
{
int i,op,x;
fin>>m;
for(i=1; i<=m; i++)
{
fin>>op>>x;
if(op==0)
fout<<Caut_Bin1(x)<<"\n";
else if(op==1)
fout<<Caut_Bin2(x)<<"\n";
else fout<<Caut_Bin3(x)<<"\n";
}
}
int main()
{
Citire();
Rezolvare();
fin.close();
fout.close();
return 0;
}