Pagini recente » Cod sursa (job #1123794) | Cod sursa (job #522397) | Cod sursa (job #228693) | Cod sursa (job #2282802) | Cod sursa (job #1968764)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int sir[100005];
int N, M;
int i, x, p;
int cautare_binara(int e, int op)
{
int i2 = N - 1;
int i1 = 0;
int mij;
while(i2 - i1 > 1)
{
mij = (i1 + i2) / 2;
if(sir[mij] < e)
{
i1 = mij;
}
else if(sir[mij] > e)
{
i2 = mij;
}
else
{
if(op == 0)
{
while(sir[mij] == e)
{
++mij;
}
return mij - 1;
}
else if(op == 1)
{
while(sir[mij] == e)
{
++mij;
}
return mij - 1;
}
else
{
while(sir[mij] == e)
{
--mij;
}
return mij + 1;
}
}
}
if(op == 0)
{
if(sir[i1] == e)
{
mij = i1;
while(sir[mij] == e)
{
++mij;
}
return mij - 1;
}
else if(sir[i2] == e)
{
mij = i2;
while(sir[mij] == e)
{
++mij;
}
return mij - 1;
}
else return -2;
}
else if(op == 1)
{
if(e < sir[i2])
{
return i1;
}
else return i2;
}
else
{
if(e > sir[i1])
{
return i2;
}
else return i1;
}
}
int main()
{
fin>>N;
for(i = 0; i < N; ++i)
{
fin>>sir[i];
}
fin>>M;
for(i = 0; i < M; ++i)
{
fin>>p>>x;
fout<<cautare_binara(x, p) + 1<<'\n';
}
return 0;
}