Cod sursa(job #1373928)
Utilizator | Data | 4 martie 2015 21:28:28 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.69 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,m,v[2000];
int cautb(int x)
{
int li , lf , mij;
li = 1;
lf = m;
while ( li <= lf )
{
mij = (li+lf)/2;
if(v[mij] == x)
{
return mij;
}
else
{
if(v[mij] < x)
li = mij +1;
else
lf = mij-1;
}
}
return mij;
}
int main()
{
int i,x,p;
f>>m;
for(i = 1; i <= m; i++)
f>>v[i];
f>> n;
for( i = 1; i <= n; i++)
{
f>> p >>x;
if(p == 0)
{
p = cautb(x);
if(v[p] != x)
g<<-1<<"\n";
else
{
while(v[p] == x)
p++;
g<<p-1<<"\n";
}
}
if(p == 1)
{
p = cautb(x);
if(v[p] != x)
{
if(v[p] < x)
g<< p;
else
g<<p-1;
}
else
{
while(v[p] == x)
p++;
g<<p-1<<"\n";
}
}
if(p == 2)
{
p = cautb(x);
if(v[p] != x)
{
if(v[p] > x)
g<< p;
else
g<<p-1;
}
else
{
while(v[p] == x)
p--;
g<<p+1<<"\n";
}
}
}
return 0;
}