Cod sursa(job #858403)

Utilizator blechereyalBlecher Eyal blechereyal Data 18 ianuarie 2013 21:06:08
Problema Cautare binara Scor 0
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<<=1;
        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<<=1;
        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<<=1;
        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;
}