Cod sursa(job #2895068)

Utilizator bogdan2405Strat Bogdan-Valentin bogdan2405 Data 28 aprilie 2022 18:46:48
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.67 kb
#include<bits/stdc++.h>

using namespace std;

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

    vector<int> v;

int binarySearch0(int left, int right, int target){
    if(left>right)
        return -1;
    else{
        int mid=(left+right)/2;
        if(v[mid] == target && v[mid+1] != target){
            return mid;
        }
        else if(v[mid]>target)
            return binarySearch0(left,mid-1,target);
        else
            return binarySearch0(mid+1,right,target);
    }
}

int binarySearch1(int left, int right, int target){
    if(left>right)
        return -1;
    else{
        int mid = (left+right)/2;

        if(v[mid]<= target && v[mid+1]>target)
            return mid;
        else if(v[mid] > target)
            return binarySearch1(left, mid-1, target);
        else{
            return binarySearch1(mid+1,right,target);
        }
    }
}

int binarySearch2(int left, int right, int target){
    if(left>right)
        return -1;
    else{
        int mid =  (left+right)/2;
        
        if(v[mid]>=target && v[mid-1]<target)
            return mid;
        else if (v[mid]<target){
            return binarySearch2(mid+1,right,target);
        }
        else{
            return binarySearch2(left,mid-1,target);
        }
    }
}

int main(){
    int n,m,tip;


    f>>n;

    int i,a;
    for(i=0;i<n;++i){
        f>>a;
        v.push_back(a);
    }

    f>>m;
    for(i=0;i<m;++i){
        f>>tip>>a;
        if(tip==0){
            g<<binarySearch0(0,n-1,a)+1<<'\n';
        }
        else if(tip==1){
            g<<binarySearch1(0,n-1,a)+1<<'\n';
        }
        else if(tip==2){
            g<<binarySearch2(0,n-1,a)+1<<'\n';
        }
    }
    return 0;
}