Cod sursa(job #2284702)
Utilizator | Data | 17 noiembrie 2018 12:58:16 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.89 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int V[100001];
int main()
{
int n, i, rasp, ls, ld, mij, x, m, intreb, j;
f>>n;
for(i=1; i<=n; i++)//citire
{
f>>V[i];
}
f>>m;
for(j=m; j>0; j--)//parcurgere intrebari
{
f>>intreb;
f>>x;
if(intreb==0)//upperbound-1
{
rasp=-1;
ls=1;
ld=n;
while(ls<=ld)
{
mij=(ls+ld)/2;
if(V[mij]>x)
{
rasp=mij;
ld=mij-1;
}
else
{
ls=mij+1;
}
}
if(rasp==-1)
{
g<<rasp<<endl;
}
else
{
g<<rasp-1<<endl;
}
}
else if(intreb==1)//upperbound-1
{
ls=1;
ld=n;
rasp=-1;
while(ls<=ld)
{
mij=(ls+ld)/2;
if(V[mij]>x)
{
rasp=mij;
ld=mij-1;
}
else
{
ls=mij+1;
}
}
g<<rasp-1<<endl;
}
else if(intreb==2)//lowerbound
{
rasp=-1;
ls=1;
ld=n;
while(ls<=ld)
{
mij=(ls+ld)/2;
if(V[mij]>=x)
{
rasp=mij;
ld=mij-1;
}
else
{
ls=mij+1;
}
}
g<<rasp<<endl;
}
}
return 0;
}