Cod sursa(job #1963157)
Utilizator | Data | 12 aprilie 2017 12:37:04 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.13 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,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)
{
st=mij+1;
}
else if(v[mij]<y)
{
dr=mij-1;
}
mij=(st+dr)/2;
}
while(v[mij]==y)
{
mij++;
}
if(v[mij-1]!=y)
{
out << -1 << '\n';
}
else
{
out << mij-1 << '\n';
}
}
else if(x==1)
{
while(st<=dr && v[mij]!=y)
{
if(v[mij]>y)
{
st=mij+1;
}
else
{
dr=mij-1;
}
mij=(st+dr)/2;
}
while(v[mij]<=y)
{
mij++;
}
out << mij-1 << '\n';
}
else if(x==2)
{
while(st<=dr && v[mij]!=y)
{
if(v[mij>y])
{
st=mij+1;
}
else
{
dr=mij-1;
}
mij=(st+dr)/2;
}
if(v[mij]>=y)
{
while(v[mij]>=y)
{
mij--;
}
out << mij+1 << '\n';
}
else
{
while(v[mij]<y)
{
mij++;
}
out << mij-1 << '\n';
}
}
}
}