Cod sursa(job #1757350)
Utilizator | Data | 14 septembrie 2016 21:19:26 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.87 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
long long a[110000],rsp[110000],intb,nr;
int m,n,l,r,mij;
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>a[i];
fin>>m;
for(int i=1;i<=m;i++)
{
fin>>intb>>nr;
if(intb==0)
{
l=1;
r=n;
while(l<=r)
{
mij=(l+r)/2;
if(mij<=nr)
l=mij+1;
else r=mij-1;
}
mij=(l+r)/2;
if(a[mij]>nr)
mij--;
if(a[mij]==nr)
rsp[i]=mij;
else rsp[i]=-1;
}
else if(intb==1)
{
l=1;
r=n;
while(l<r)
{
mij=(l+r)/2;
if(mij<=nr)
l=mij+1;
else if(mij>nr)
r=mij;
}
mij=(l+r)/2;
if(a[mij]>nr)
mij--;
if(a[mij]==nr)
rsp[i]=mij;
}
else if(intb==2)
{
l=1;
r=n;
while(l<r)
{
mij=(l+r)/2;
if(mij<nr)
l=mij+1;
else if(mij>=nr)
r=mij;
}
mij=(l+r)/2;
if(a[mij]<nr)
mij++;
if(a[mij]==nr)
rsp[i]=mij;
}
}
for(int i=1;i<=m;i++)
fout<<rsp[i]<<"\n";
return 0;
}