Cod sursa(job #1028647)

Utilizator sateanuAldea Andrei sateanu Data 14 noiembrie 2013 15:27:02
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <iostream>
using namespace std;
int v[100000],n;

int cautbin0(int *v, int x)
{
    int putere=(1<<30);
    int poz=1;
    while(putere)
    {
        if(poz+putere<=n&&v[poz+putere]<=x)
            poz+=putere;
        putere>>=1;
    }
    if(v[poz]==x)return poz;
    else return -1;
}

int cautbin1(int *v, int x)
{
    int putere=(1<<30);
    int poz=1;
    while(putere)
    {
        if(poz+putere<=n&&v[poz+putere]<=x)
            poz+=putere;
        putere>>=1;
    }
    return poz;
}

int cautbin2(int *v, int x)
{
    int putere=(1<<30);
    int poz=1;
    while(putere)
    {
        if(poz+putere<=n&&v[poz+putere]<x)
            poz+=putere;
        putere>>=1;
    }
    return poz+1;
}

int main()
{
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    f>>n;
    for(int i=1;i<=n;i++)
        f>>v[i];
    int k,x,tip;
    f>>k;
    for(int i=0;i<k;i++)
    {
        f>>tip;
        f>>x;
        switch(tip)
        {
        case 0:
            g<<cautbin0(v,x)<<'\n';
            break;
        case 1:
            g<<cautbin1(v,x)<<'\n';
            break;
        case 2:
            g<<cautbin2(v,x)<<'\n';
            break;
        default:
            break;
        }
    }
    return 0;
}