Cod sursa(job #1022557)

Utilizator Aleks10FMI - Petrache Alex Aleks10 Data 5 noiembrie 2013 18:31:47
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>

using namespace std;

int n,a[100001];
int caut(int x){
    int pos,i;
    pos=1<<19;
    for(i=0;pos!=0;pos=pos/2)
        if(i+pos<n && a[i+pos]<=x){
            i=i+pos;
            //cout<<a[i]<<" ";
        }
    return i;
}

int main()
{
    int i,x,z,m;
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    f>>n;
    for(i=0;i<n;i++)
        f>>a[i];
    f>>m;
    for(i=0;i<m;i++)
    {
        f>>x>>z;
        if(x==0){
            int rez=caut(z);
            if(a[rez]!=z)
                g<<-1<<'\n';
            else
            g<<rez+1<<'\n';
        }
        if(x==1)
        {
            g<<caut(z)+1<<'\n';
        }
        if(x==2)
        {
            int nr=caut(z);
            int nrv=a[nr];
            int poz=nr;
            bool ok=true;
            while(ok){
                nr--;
                if(a[nr]==nrv)
                    poz=nr;
                else
                    ok=false;
            }
            g<<poz+1;
        }
    }
    return 0;
}