Mai intai trebuie sa te autentifici.
Cod sursa(job #1953913)
| Utilizator | Data | 5 aprilie 2017 09:12:58 | |
|---|---|---|---|
| Problema | Cautare binara | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.26 kb |
#include <iostream>
#include <cstdio>
#define N 100005
using namespace std;
int n, vec[N], x, p;
void afisare(int poz)
{
if(!p)
{
if(vec[poz] == x)
{
printf("%d\n", poz);
}
else
{
printf("-1\n");
}
}
if(p == 1)
{
while(vec[poz] <= x)
{
poz++;
}
printf("%d\n", poz - 1);
}
if(p == 2)
{
while(vec[poz] >= x)
{
poz--;
}
printf("%d\n", poz + 1);
}
}
void cautare_binara(int st, int dr)
{
if(st == dr)
{
afisare(st);
return;
}
int mij = (st + dr) >> 1;
if(x <= mij)
{
cautare_binara(st, mij);
}
else
{
cautare_binara(mij + 1, dr);
}
}
void citire()
{
scanf("%d\n", &n);
for(int i = 1 ; i <= n ; ++i)
{
scanf("%d ", &vec[i]);
}
int tmp;
scanf("%d\n", &tmp);
for(int i = 0 ; i < tmp ; ++i)
{
scanf("%d %d\n", &p, &x);
cautare_binara(1,n);
}
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
citire();
return 0;
}
