Cod sursa(job #2273763)
Utilizator | Data | 31 octombrie 2018 21:40:10 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 2.67 kb |
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100110];
int main()
{
int n, i, p, poz1, st, dr, mij, x, y;
fin >> n;
for(i = 1;i <= n;i++)
fin >> v[i];
fin >> p;
for(i = 1;i <= p;i++)
{
fin >> x >> y;
if(x == 0)
{
st = 1;
dr = n;
poz1 = -1;
while(st <= dr)
{
mij = st+(dr-st) / 2;
if(v[mij] == y)
{
poz1 = mij;
st = mij + 1;
}
else if(v[mij] < y)
st = mij + 1;
else if(v[mij] > y)
dr = mij - 1;
}
fout<<poz1<<"\n";
}
else if(x == 1)
{
st = 1;
dr = n;
poz1 = -1;
while(st <= dr)
{
mij = st+(dr-st) / 2;
if(v[mij] == y)
{
poz1 = mij;
st = mij + 1;
}
else if(v[mij] < y)
st = mij + 1;
else if(v[mij] > y)
dr = mij - 1;
}
if(poz1!= -1)
fout << poz1<<"\n";
else{
if(v[mij] < y)
fout << mij <<"\n";
else if(v[mij] > y)
fout << mij - 1 << "\n";
}
}
else if(x == 2)
{
st = 1;5
1 3 3 3 5
3
0 3
1 3
2 3
dr = n;
poz1 = -1;
while(st <= dr)
{
mij = st+(dr-st) / 2;
if(v[mij] == y)
{
poz1 = mij;
dr = mij - 1;
}
else if(v[mij] < y)
st = mij + 1;
else if(v[mij] > y)
dr = mij - 1;
}
if(poz1!= -1)
fout << poz1 << "\n";
else
{
if(v[mij] < y)
fout << mij+1 << "\n";
else if(v[mij] > y)
fout << mij << "\n";
}
}
}
return 0;
}