Cod sursa(job #1383834)
| Utilizator | Data | 10 martie 2015 18:11:36 | |
|---|---|---|---|
| Problema | Cautare binara | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.28 kb |
#include <stdio.h>
using namespace std;
FILE*f=fopen("cautbin.in","r"),*g=fopen("coutbin.out","w");
int v[100030], n, m, x, y;
int main()
{
fscanf(f,"%d\n",&n);
for(int i = 1; i <= n; i++)
{
fscanf(f,"%d ",&v[i]);
}
fscanf(f,"%d\n",&m);
for(int i = 1; i <= m; i++)
{
fscanf(f,"%d %d\n", &x, &y);
int p = 1, u = n, mij;
if(x == 2)
{
while(p <= u)
{
mij = (p+u) / 2;
if(v[mij] >= y)
{
u = mij - 1;
}
else{
p = mij + 1;
}
}
fprintf(g,"%d\n",p);
}
else {
while(p <= u)
{
mij = (p+u) / 2;
if(v[mij] <= y)
{
p = mij + 1;
}
else{
u = mij - 1;
}
}
if(v[u] == y && x == 0)
{
fprintf(g,"%d\n",u);
}
else if(v[u] != y && x == 0)
fprintf(g,"-1\n");
else
fprintf(g,"%d\n",u);
}
}
return 0;
}
