Mai intai trebuie sa te autentifici.
Cod sursa(job #858404)
Utilizator | Data | 18 ianuarie 2013 21:08:04 | |
---|---|---|---|
Problema | Cautare binara | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.24 kb |
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int putere=1,N,V[NMAX],M;
void cautare_binara0(int x)
{
int p,u;
u=putere;
p=1;
while (u>0)
{if (p+u<=N&&V[p+u]<=x)
p+=u;
u>>=1;
}
if (V[p]!=x) g<<"-1 \n";
else g<<p<<"\n";
}
void cautare_binara1(int x)
{
int p,u;
u=putere;
p=1;
while (u>0)
{if (p+u<=N&&V[p+u]<=x)
p+=u;
u>>=1;
}
g<<p<<"\n";
}
void cautare_binara2(int x)
{
int p,u;
u=putere;
p=1;
while (u>0)
{if (p+u<=N&&V[p+u]<x)
p+=u;
u>>=1;
}
g<<p+1<<"\n";
}
int main()
{ int op,x,i;
f>>N;
while (putere*2<=N) putere<<=1;
for (i=1;i<=N;i++)
f>>V[i];
f>>M;
for (i=1;i<=M;i++)
{f>>op>>x;
switch (op)
{
case 0:
cautare_binara0(x);
break;
case 1:
cautare_binara1(x);
break;
case 2:
cautare_binara2(x);
break;
}
}
return 0;
}