Cod sursa(job #1363816)
Utilizator | Data | 27 februarie 2015 11:33:30 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.66 kb |
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100000];
int main()
{
int i,n,l,r,m,t1,t2;
fin>>n;
for(i=0;i<n;i++)
fin>>v[i];
fin>>m;
for(i=0;i<m;i++)
{
fin>>t1>>t2;
if(t1==0)
{
l=0;
r=n-1;
int sol = -1;
while(l<=r)
{
if(t2>=v[(l+r)/2])
{
sol = (l+r)/2;
l=(l+r)/2+1;
}
else
{
r=(l+r)/2-1;
}
}
if(v[sol]==t2)
fout<<sol+1<<"\n";
else
fout<<"-1\n";
}
else if(t1==1)
{
l=0;
r=n-1;
int sol = -1;
while(l<=r)
{
if(t2>=v[(l+r)/2])
{
sol = (l+r)/2;
l=(l+r)/2+1;
}
else
{
r=(l+r)/2-1;
}
}
fout<<sol+1<<"\n";
}
else
{
l=0;
r=n-1;
int sol = -1;
while(l<=r)
{
if(t2<=v[(l+r)/2])
{
sol = (l+r)/2;
r=(l+r)/2-1;
}
else
{
l=(l+r)/2+1;
}
}
fout<<sol+1<<"\n";
}
}
return 0;
}