Cod sursa(job #2659116)

Utilizator martinmiere133Cranga Antonio martinmiere133 Data 15 octombrie 2020 20:58:52
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.64 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <set>
#include <algorithm>
#include <list>
#include <map>
#include <math.h>
#define NMAX 100001
 
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
vector<int> v(NMAX);
int n;
int cautare_binara1(int st , int dr , int val)
{
    if(st > dr)
        return -1;
    else
    {
        int mij = st +(dr-st)/2;
        if(v[mij] == val)
        {
            while(v[mij] == val)mij++;
            return mij-1;
        }
        else if(v[mij] > val)return cautare_binara1(st , mij , val);
        else return cautare_binara1(mij+1,dr,val);
    }
}
int cautare_binara2(int st , int dr , int val)
{
    if(st >= dr)
    {
        int mij = st + (dr -st) /2;
        if(v[mij] > val)mij--;
        return mij;
    }
    
    else
    {
        int mij = (st + dr) / 2;
        if(v[mij] <= val)return cautare_binara2(mij+1, dr, val);
        else return cautare_binara2(st, mij, val);
    }
}
int cautare_binara3(int st,  int dr , int val)
{
    if(st >= dr) {
        int mij = st + (dr - st)/2;
        if(v[mij] < val)mij++;
        return mij;
    }
    else
    {
        int mij = st + (dr - st) / 2;
        if(v[mij] < val)return cautare_binara3(mij+1, dr, val);
        else return cautare_binara3(st, mij,val);
    }
}
int main() {
    int n;
    f>>n;
    for(int i=1;i<=n;i++)
    {
        f>>v[i];
    }
    int m;
    f>>m;
    for(int i=1;i<=m;i++)
    {
        int a , b;
        f>>a>>b;
        if(a==0)g<<cautare_binara1(1, n, b)<<'\n';
        else if(a==1)g<<cautare_binara2(1,n,b)<<'\n';
        else g<<cautare_binara3(1,n,b)<<'\n';
    }
    return 0;
}