Cod sursa(job #1059204)

Utilizator teodor98Teodor Sz teodor98 Data 16 decembrie 2013 13:19:21
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
#include <fstream>
#define N 10001
#define M 10001

using namespace std;
int v[N], n, m;

ifstream in("cautbin.in");
ofstream out("cautbin.out");
void p0(int x)
{
    int pas = 1<<16;
    int i=0;
    while(pas != 0)
    {
        if(i+pas <= n && v[i+pas] <= x)
            i+=pas;
        //cout << i << endl;
        pas /=2;
    }
    if(v[i] == x)
        out << i;
    else
        out << -1;
    out << "\n";
}

void p1(int x)
{
    int pas = 1<<16;
    int i=0;
    while(pas != 0)
    {
        if(i+pas <=n && v[i+pas] <= x)
            i+=pas;
        pas/=2;
    }
    out << i;
    out << "\n";
}

void p2(int x)
{
    int pas = 1<<16;
    int i=0;
    while(pas != 0)
    {
        if(i+pas <=n && v[i+pas] < x)
            i+=pas;
        //cout << i;
        pas/=2;
    }
    out << 1+i;
    out << "\n";
}

int cautbin(int p,int x)
{
    switch(p)
    {
    case 0:
        p0(x);
        break;
    case 1:
        p1(x);
        break;
    case 2:
        p2(x);
        break;
    default:
        return 0;
        break;
    }
    return 0;
}

int main()
{
    in >> n;
    for(int i=1; i<=n; i++)
        in >> v[i];
    in >> m;
    for(int i=1; i<=m; i++)
    {
        int p, x;
        in >> p;
        in >> x;
        //cout << "Aa::" <<  endl;
        cautbin(p, x);
    }
    return 0;
}