Cod sursa(job #1963204)
Utilizator | Data | 12 aprilie 2017 13:00:22 | |
---|---|---|---|
Problema | Cautare binara | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.02 kb |
#include<iostream>
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
long long v[100005];
int main()
{
int n,m,x,y,i,k,st,mij,j,dr;
in >> n;
for(i=1; i<=n; i++)
{
in >> v[i];
}
in >> m;
for(i=1; i<=m; i++)
{
in >> x >> y;
st=1;
dr=n;
mij=(st+dr)/2;
if(x==0)
{
while(st<=dr && y!=v[mij])
{
if(v[mij]>y)
{
dr=mij-1;
}
else
{
st=mij+1;
}
mij=(st+dr)/2;
}
j=mij;
while(v[j]==v[mij])
{
j++;
}
mij=j-1;
if(v[mij]!=y)
{
mij=-1;
}
}
else if(x==1)
{
while(st<=dr && v[mij]!=y)
{
if(v[mij]>y)
{
dr=mij-1;
}
else
{
st=mij+1;
}
mij=(st+dr)/2;
}
if(v[mij]==y)
{
j=mij;
while(v[j]==v[mij])
{
j++;
}
mij=j-1;
}
}
else if(x==2)
{
while(st<=dr && v[mij]!=y)
{
if(v[mij]>y)
{
dr=mij-1;
}
else
{
st=mij+1;
}
mij=(st+dr)/2;
}
if (v[mij]==y)
{
j=mij;
while (v[j]==v[mij])
j--;
mij=j+1;
}
else
mij++;
}
out << mij << '\n';
}
}