Cod sursa(job #1122397)
Utilizator | Data | 25 februarie 2014 17:55:49 | |
---|---|---|---|
Problema | Cautare binara | Scor | 20 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.2 kb |
#include <fstream>
#include <algorithm>
using namespace std;
int n, k, i,nr,nrbun,v[100001],a,b,mij,q,d,st,dr;
bool ok;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int main ()
{
fin >> n;
for(i = 1; i <= n; ++i)
fin >> v[i];
fin >> q;
for(i = 1; i <= q; ++i)
{
fin >> a >> b;
switch(a)
{
case 0 :{
ok = 0;
st = 1;
dr = n;
while(st < dr)
{
mij = st + (dr-st)/2;
if(v[mij]==b)
{
while(v[mij]==b)
++mij;
--mij;
ok = 1;
break;
}
else if(b < v[mij])
{
dr = mij;
++st;
}
else{
st = mij;
--dr;
}
}
if(ok)
fout <<mij<<'\n';
else fout << -1 << '\n';
break;
}
case 1: {
d = lower_bound(v + 1, v + n + 1, b+1) - v - 1;
fout << d << '\n';
break;
}
case 2: {
d = upper_bound(v + 1, v + n + 1, b-1) - v;
fout << d << '\n';
break;
}
}
}
return 0;
}