Cod sursa(job #1309335)

Utilizator sterymanSterian Cosmin Cristian steryman Data 5 ianuarie 2015 17:55:29
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.04 kb
#include <iostream>
#include <fstream>

using namespace std;

int v[100001];

int main()
{
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");

    /*int n,m,i,j,x,st,dr,mij;
    f>>n;
    for(i=1; i<=n; i++)
        f>>v[i];
    f>>m;
    for(i=1;i<=m;i++)
    {
        f>>j>>x;
        if(j==1)
        {
            st=1;
            dr=n;
            while(st<dr)
            {
                mij=(st+dr+1)/2;
                if(x>=v[mij])
                    st=mij;
                else
                    dr=mij-1;
            }
            if(v[dr]==x)
                g<<dr<<endl;
            else
                g<<"-1"<<endl;
        }
        else if(j==2)
        {
            st=1;
            dr=n;
            while(st<dr)
            {
                mij=(st+dr)/2;
                if(x<=v[mij])
                    dr=mij;
                else
                    st=mij+1;
            }
            g<<st<<endl;
        }
        else
        {
            st=1;
            dr=n;
            while(st<dr)
            {
                mij=(st+dr+1)/2;
                if(x>=v[mij])
                    st=mij;
                else
                    dr=mij-1;
            }
            g<<st<<endl;
        }
    }*/
    int n,m,pas,i,j,k,x;
    f>>n;
    for(i=1;i<=n;i++)
        f>>v[i];
    f>>m;
    for(j=1;j<=m;j++)
    {
        f>>k>>x;
        pas=1<<16;
        i=0;
        if(k==0)
        {
            while(pas!=0)
            {
                if(i+pas<=n&&v[i+pas]<=x)
                    i+=pas;
                pas/=2;
            }
            if(v[i]==x) g<<i<<"\n";
            else g<<"-1\n";
        }
        if(k==1)
        {
            while(pas!=0)
            {
                if(i+pas<=n&&v[i+pas]<=x)
                    i+=pas;
                pas/=2;
            }
            g<<i<<"\n";
        }
        if(k==2)
        {
            while(pas!=0)
            {
                if(i+pas<=n&&v[i+pas]<x)
                    i+=pas;
                pas/=2;
            }
            g<<i+1<<"\n";
        }
    }
}