Cod sursa(job #2029835)

Utilizator luanastLuana Strimbeanu luanast Data 30 septembrie 2017 15:24:45
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int n,m,p,u,mid,i,test;
unsigned long long x,v[100001];

void caut1(int x){
    int p,u;
    p=1;
    u=n;
    while(p<=u){
        int mid=p+(u-p)/2;
        if(v[mid]==x && v[mid]!=v[mid+1]){
            fout<<mid<<"\n";
            return;
        }
        else{
            if(v[mid]<=x)
                p=mid;
            else
                u=mid;
        }
    }
    fout<<"-1";
}

void caut2 (int x){
    int p,u;
    p=1;
    u=n;
    while(p<=u){
        int mid=p+(u-p)/2;
        if(v[mid]<=x && v[mid+1]>x){
            fout<<mid<<"\n";
            return;
        }
        else{
            if(v[mid]<=x)
                p=mid;
            else
                u=mid;
        }
    }
}

void caut3(int x){
    int p,u;
    p=1;
    u=n;
    while(p<=u){
        int mid=p+(u-p)/2;
        if(v[mid]>=x && v[mid-1]<x){
            fout<<mid<<"\n";
            return;
        }
        else{
            if(v[mid]<x)
                p=mid;
            else
                u=mid;
        }
    }
}

int main(){
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    sort(v+1,v+n+1);
    fin>>m;
    for(i=1;i<=m;i++){
        fin>>test>>x;
        if(test==0)
            caut1(x);
        if(test==1)
            caut2(x);
        if(test==2)
            caut3(x);
    }

}