Cod sursa(job #1458697)

Utilizator Nastase0531Nastase Constantin Nastase0531 Data 8 iulie 2015 12:09:51
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.72 kb
#include<iostream>
#include<fstream>
using namespace std;

int A[100000];
long N,M;

int cautarebinara0(int y){
    //cout<<N<<" "<<M<<endl;
    long min=0,max=N-1;
    int guess;
    while(max>=min){
       // cout<<min<<" "<<max<<endl;
        guess=(min+max)/2;
        if(A[guess]<y)min=guess+1;
        else if (A[guess]>y) max=guess-1;
        else {
            while(A[guess+1]==y)//{
                guess++;
                //cout<<guess<<endl;}
            return ++guess;
            }
    }
return -1;
}

int cautarebinara1(int y){
    long min=0,max=N-1;
    int guess;
    while(max>=min){
       // cout<<min<<" "<<max<<endl;
        guess=(min+max)/2;
        if(A[guess]<y)min=guess+1;
        else if (A[guess]>y) max=guess-1;
        else {
            while(A[guess+1]==y)//{
                guess++;
                //cout<<guess<<endl;}
            return ++guess;
            }
    }
return guess;
}

int cautarebinara2(int y){
    long min=0,max=N-1;
    int guess;
    while(max>=min){
       // cout<<min<<" "<<max<<endl;
        guess=(min+max)/2;
        if(A[guess]<y)min=guess+1;
        else if (A[guess]>y) max=guess-1;
        else {
            while(A[guess-1]==y)//{
                guess--;
                //cout<<guess<<endl;}
            return ++guess;
            }
    }
return guess;
}

int main(){
int x,y,rez;
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    f>>N;
    for (int i=0;i<N;i++){
            f>>A[i];
        }
    f>>M;
    for(int i=0;i<M;i++){
        f>>x>>y;
        //cout<<x<<" "<<y<<endl;
        if(x==0) rez=cautarebinara0(y);
        if(x==1) rez=cautarebinara1(y);
        if(x==2) rez=cautarebinara2(y);
        g<<rez<<endl;
        }
    f.close();
    g.close();
return 0;
}