Pagini recente » Cod sursa (job #2749421) | Cod sursa (job #2480004) | Cod sursa (job #900405) | Cod sursa (job #882104) | Cod sursa (job #900352)
Cod sursa(job #900352)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int m,v[1000],i,n,intr,mij,trb;
int cautare_binara0(int x)
{
int st,dr,m,j;
st=0;
dr=n+1;
m=0;
while(st<dr&&v[m]!=x)
{
m=st+(dr-st)/2;
if(v[m]>x)
st=m+1;
else
dr=m-1;
}
if(v[m]!=x)
return -1;
else
{
j=m;
while(v[j]==v[m])
m++;
return m-1;
}
}
int cautare_binara1(int x)
{
int st,dr,m,j;
st=0;
dr=n+1;
m=0;
while(st<dr&&v[m]!=x)
{
m=st+(dr-st)/2;
if(v[m]>x)
st=m+1;
else
dr=m-1;
}
if(v[m]!=x)
{
while(v[m]>x)
m--;
return m-1;
}
else
{
j=m;
while(v[j]==v[m])
m++;
return m-1;
}
}
int cautare_binara2(int x)
{
int st,dr,m,j;
st=0;
dr=n+1;
m=0;
while(st<dr&&v[m]!=x)
{
m=st+(dr-st)/2;
if(v[m]>x)
st=m+1;
else
dr=m-1;
}
if(v[m]!=x)
{
while(v[m]<x)
m++;
return m;
}
else
{
j=m;
while(v[j]==v[m])
m--;
return m+1;
}
}
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
fin>>m;
for(i=1;i<=m;i++)
{
int j;
fin>>trb;
fin>>intr;
if(trb==0)
fout<<cautare_binara0(intr)<<'\n';
if(trb==1)
fout<<cautare_binara1(intr)<<'\n';
if(trb==2)
fout<<cautare_binara2(intr)<<'\n';
}
return 0;
}