Cod sursa(job #1046683)

Utilizator Aleks10FMI - Petrache Alex Aleks10 Data 3 decembrie 2013 12:36:20
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>

using namespace std;

long n,a[100000],m;

int cautbin(int x){
    long long p=1<<27,i;
    //cout<<p;
    for(i=0;p!=0;p=p/2)
        if(i+p<n && a[i+p]<=x)
            i=i+p;
    //cout<<i;
    return i;
}

int cautbin2(int x){
    long long p=1<<27,i,minim=0;
    //cout<<p;
    for(i=0;p!=0;p=p/2)
    {
        if(i+p<n && a[i+p]>=x)
            minim=i+p;
        if(i+p<n && a[i+p]<x)
            i=i+p;
    }
    //cout<<i;
    if(a[0]>=x)
        minim=0;
    return minim;
}

int main()
{
    long x,y,i;
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    f>>n;
    for(i=0;i<n;i++)
        f>>a[i];
    f>>m;
    long poz=0;
    for(i=0;i<m;i++)
    {
        f>>x>>y;
        if(x==0){
            poz=cautbin(y);
            if(a[poz]==y)
                g<<cautbin(y)+1<<'\n';
            else g<<-1<<'\n';
        }

        if(x==1){
            g<<cautbin(y)+1<<'\n';
        }

        if(x==2)
            g<<cautbin2(y)+1<<'\n';
    }
    return 0;
}