Cod sursa(job #1497839)
Utilizator | Data | 7 octombrie 2015 16:33:34 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.78 kb |
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int main()
{ int n,m,i,v[100001],q,nr,min,max,mid,a;
f>>n;
for(i=1;i<=n;++i) f>>v[i];
f>>m;
for(i=0;i<m;++i)
{
f>>q>>nr;
if(q==0)
{ a=0;
min=1;
max=n;
while(min<=max)
{
mid=min+(max-min)/2;
if(v[mid]==nr)
{ a=mid;
min=mid+1;
while(min<=max)
{
mid=min+(max-min)/2;
if(v[mid]==nr)
{
a=mid;
min=mid+1;
}
else max=mid-1;
}
}
else if(v[mid]<nr) min=mid+1;
else max=mid-1;
}
if(a) g<<a<<'\n';
else g<<"-1\n";
}
else if(q==1)
{ a=0;
min=1;
max=n;
while(min<=max)
{
mid=min+(max-min)/2;
if(v[mid]<=nr)
{ a=mid;
min=mid+1;
while(min<=max)
{
mid=min+(max-min)/2;
if(v[mid]<=nr)
{
a=mid;
min=mid+1;
}
else max=mid-1;
}
}
else max=mid-1;
}
g<<a<<'\n';
}
else
{ a=0;
min=1;
max=n;
while(min<=max)
{
mid=min+(max-min)/2;
if(v[mid]>=nr)
{ a=mid;
max=mid-1;
while(min<=max)
{
mid=min+(max-min)/2;
if(v[mid]>=nr)
{
a=mid;
max=mid-1;
}
else min=mid+1;
}
}
else min=min-1;
}
g<<a<<'\n';
}
}
return 0;
}
/*
int mid,max,min;
min=1;
max=n;
while(min<=max)
{ mid=min+(max-min)/2;
if(v[mid]==c)
{
cout<<mid<<'\n';
return 0;
}
else if(v[mid]<c){
min=mid+1;
}
else max=mid-1;
}
cout<<"target not found\n";
*/