Cod sursa(job #2620612)
Utilizator | Data | 29 mai 2020 12:04:00 | |
---|---|---|---|
Problema | Cautare binara | Scor | 40 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 2.27 kb |
#include <iostream>
#include <fstream>
#include <algorithm>
#define Maxx 100001
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int N,L,A[Maxx];
int M,x,y,poz,OK,st,dr,mij;
int main()
{
f >> N;
for(int i=1; i<=N; i++)
f >> A[i];
f >> M;
for(int i=1; i<=M; i++)
{
f >> x >> y;
if ( x==0 )
{
poz = -1;
OK = 0;
st = 1;
dr = N;
while ( st<=dr )
{
mij = (st+dr)/2;
if ( y == A[mij] )
{
poz = mij;
OK=1;
break;
}
else if ( y<A[mij] )
dr = mij-1;
else if ( y>A[mij] )
st = mij+1;
}
while( A[poz+1]==A[poz] )
poz++;
if(OK==1)
g << poz << endl;
else
g << "-1" << endl;
}
else if ( x==1 )
{
poz = 0;
OK = 0;
st = 1;
dr = N;
while ( st<=dr )
{
mij = (st+dr)/2;
if ( y == A[mij] )
{
poz = mij;
break;
}
else if ( y<A[mij] )
dr = mij-1;
else if ( y>A[mij] )
st = mij+1;
poz = st;
}
if ( A[poz]!=y )
poz--;
g << poz << endl;
}
else
{
poz = 0;
OK = 0;
st = 1;
dr = N;
while ( st<=dr )
{
mij = (st+dr)/2;
if ( y == A[mij] )
{
poz = mij;
break;
}
else if ( y<A[mij] )
dr = mij-1;
else if ( y>A[mij] )
st = mij+1;
poz = st;
}
while ( A[poz]==A[poz-1] )
poz--;
g << poz << endl;
}
}
return 0;
}