Cod sursa(job #639629)

Utilizator ZexonAvramita Teodor Zexon Data 23 noiembrie 2011 18:05:58
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <iostream>
#define N 100010
using namespace std;
int v[N];
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int n;
int couta0(int x)
{
    int i,pas=1<<16;
    for(i=0;pas!=0;pas/=2)
    {
        if(i+pas<=n&&v[i+pas]<=x)
            i+=pas;
    }
    if(v[i]==x) return i;
    return -1;
}

int couta2(int x)
{
    int i,pas=1<<16;
    for(i=0;pas!=0;pas/=2)
    {
        if(i+pas<=n&&v[i+pas]<x)
            i+=pas;
    }
    return i+1;
}

int couta1(int x)
{
    int i,pas=1<<16;
    for(i=0;pas!=0;pas/=2)
    {
        if(i+pas<=n&&v[i+pas]<=x)
            i+=pas;
    }

    return i;
}

int main ()
{
    int  tip ,m,cheese;
    in>>n;
    for(int i = 1;i<=n;i++)
    {
        in>>v[i];
    }
    in>>m;
    for(int i = 0;i<m;i++)
    {
        in>>tip>>cheese;
        switch(tip)
        {
            case 0: out<<couta0(cheese)<<"\n";break;
            case 1: out<<couta1(cheese)<<"\n";break;
            case 2: out<<couta2(cheese)<<"\n";break;
        }

    }

}