Pagini recente » Borderou de evaluare (job #2486246) | Borderou de evaluare (job #2013959) | Borderou de evaluare (job #1689963) | Borderou de evaluare (job #562743) | Cod sursa (job #2412202)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
#define NMAX 100005
int N,X,M,Q,POZ;
int V[NMAX];
void Cautare_Binara_0(int st, int dr)
{
while(st<=dr)
{
int mij=(st+dr)/2;
if (V[mij]>X)
dr=mij-1;
else if (V[mij]<X)
st=mij+1;
else
{
POZ=mij;
st=mij+1;
}
}
if (st==dr&&V[st]==X)
POZ=st;
}
void Cautare_Binara_1(int st, int dr)
{
while (st<=dr)
{
int mij=(st+dr)/2;
if (V[mij]>X)
dr=mij-1;
else
{
POZ=mij;
st=mij+1;
}
}
if (st==dr&&V[st]<=X)
POZ=st;
}
void Cautare_Binara_2(int st, int dr)
{
while (st<=dr)
{
int mij=(st+dr)/2;
if (V[mij]<X)
st=mij+1;
else
{
POZ=mij;
dr=mij-1;
}
}
if (st==dr&&V[dr]>=X)
POZ=st;
}
int main()
{
fin>>N;
for (int i=1; i<=N; i++)
fin>>V[i];
fin>>M;
for (int i=1; i<=M; i++)
{
fin>>Q>>X;
POZ=-1;
if (!Q)
Cautare_Binara_0(1,N);
if (Q==1)
Cautare_Binara_1(1,N);
if (Q==2)
Cautare_Binara_2(1,N);
fout<<POZ<<"\n";
}
return 0;
}