Cod sursa(job #1772021)
Utilizator | Data | 6 octombrie 2016 14:06:41 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.18 kb |
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int n;
fin>>n;
int v[n+1];
for (int i=1;i<=n;++i)
{
fin>>v[i];
}
int b;
fin>>b;
for (int i=0;i<b;++i)
{
int a,x;
fin>>a>>x;
int s=1,d=n,sol=-1;
switch (a)
{
case 0 :sol=-1;
while (s<=d)
{
int mij=(d+s)/2;
if (x>v[mij])
{
s=mij+1;
}
else
{
if (v[mij]==x)
{
sol=mij;
if (v[mij+1]!=x)
{
break;
}
else
{
while (v[mij+1]==x)
{
mij++;
}
}
sol=mij;
break;
}
else
{
d=mij-1;
}
}
}
fout<<sol<<"\n";
break;
case 1 :
while (s<=d)
{
int mij=(d+s)/2;
if (x>=v[mij])
{
s=mij+1;
sol=mij;
}
else
{
d=mij-1;
}
}
fout<<sol<<"\n";
break;
case 2 :
while (s<=d)
{
int mij=(d+s)/2;
if (x>v[mij])
{
s=mij+1;
}
else
{
d=mij-1;
sol=mij;
}
}
fout<<sol<<"\n";
break;
}
}
}