Pagini recente » Cod sursa (job #1083223) | Cod sursa (job #1369732) | Cod sursa (job #2978949) | Cod sursa (job #1980943) | Cod sursa (job #1963087)
#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;
}
mijl--;
while(a[mijl+1]<x&&mijl<n)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;
mijl++;
while(a[mijl-1]>x&&mijl>1)mijl--;
return mijl;
}
int main()
{
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int m,i,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;
}