Cod sursa(job #1263158)
| Utilizator | Data | 13 noiembrie 2014 23:44:07 | |
|---|---|---|---|
| Problema | Cautare binara | Scor | 10 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.33 kb |
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int v[100005];
int bs(int st, int dr, int a,int nr)
{
int med,last=-1;
if(nr==0)
{
while(st<=dr)
{
med=(st+dr)>>1;
if(a==v[med])
{
last=med;
st=med+1;
}
else
if(a<v[med])
{
st=med+1;
}
if(a>v[med])
dr=med-1;
}
return last;
}
if(nr==1)
{
while(st<=dr)
{
med=(st+dr)>>1;
if(v[med]<=a)
{
last=med;
st=med+1;
}
else
dr=med-1;
}
return last;
}
if(nr==2)
{
while(st<=dr)
{
med=(st+dr)>>1;
if(v[med]>=a)
{
last=med;
dr=med-1;
}
else
st=med+1;
}
return last;
}
return 0;
}
int main() {
int n,m,nr,x;
in>>n;
for(int i=1;i<=n;i++)
in>>v[i];
sort(v+1,v+n+1);
in>>m;
for(int i=1;i<=m;i++)
{
in>>nr>>x;
out<<bs(1,n,x,nr)<<'\n';
}
return 0;
}
