Pagini recente » Cod sursa (job #623520) | Cod sursa (job #2495861) | Cod sursa (job #1007476) | Cod sursa (job #1956486) | Cod sursa (job #1963057)
#include <iostream>
#include <fstream>
using namespace std;
int a[100010],n;
int caut_bin0(int x)
{
int st,dr,mijl;
st=0;dr=n;
bool gasit=0;
while(st<=dr&&!gasit)
{
mijl=st+(dr-st)/2;
if(a[mijl]>x)dr=mijl-1;
else st=mijl+1;
if(a[mijl]==x)gasit=1;
}
if(gasit)
{
while(a[mijl+1]==x)mijl++;
return mijl;
}
return -1;
}
int caut_bin1(int x)
{
int st,dr,mijl;
st=0;dr=n;
bool gasit=0;
while(st<=dr&&!gasit)
{
mijl=st+(dr-st)/2;
if(a[mijl]>x)dr=mijl-1;
else st=mijl+1;
if(a[mijl]==x)gasit=1;
}
if(gasit)
{
while(a[mijl+1]==x)mijl++;
return mijl;
}
return mijl;
}
int caut_bin2(int x)
{
int st,dr,mijl;
st=0;dr=n;
bool gasit=0;
while(st<=dr&&!gasit)
{
mijl=st+(dr-st)/2;
if(a[mijl]>x)dr=mijl-1;
else st=mijl+1;
if(a[mijl]==x)gasit=1;
}
if(gasit) return mijl;
return mijl+1;
}
int main()
{
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int m,i,st,dr,mij,x,cer;
fin>>n;
for(i=1;i<=n;i++)
fin>>a[i];
fin>>m;
for(i=1;i<=m;i++)
{
fin>>cer>>x;
if(!cer) fout<<caut_bin0(x);
else if(cer==1) fout<<caut_bin1(x);
else fout<<caut_bin2(x);
fout<<"\n";
}
return 0;
}