Cod sursa(job #2756748)

Utilizator Gabriel_DascalescuGabriel Dascalescu Gabriel_Dascalescu Data 2 iunie 2021 19:27:58
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
#define nmax 100005

using namespace std;

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

int n, m, type, param;

int v[nmax];

int subtask1(int st, int dr, int a)
{
    int med;
    while(st<=dr)
    {
        med = (st+dr)/2;
        if(v[med]<=a)
        {
            st = med+1;
        }
        else
            dr = med-1;
    }
    med = (st+dr)/2;
    if(v[med]==a)
        return med;
    else
        return -1;
}

int subtask2(int st, int dr, int a)
{
    int med;
    while(st<=dr)
    {
        med =(st+dr)/2;
        if(v[med]>a)
            dr = med-1;
        else
            st = med+1;
    }
    med = (st+dr)/2;
    return med;
}

int subtask3(int st, int dr, int a)
{
    int med;
    while(st <= dr)
    {
        med = (st+dr)/2;
        if(v[med]<a)
            st= med +1;
        else
            dr = med-1;
    }
    med = (st+dr)/2;
    return med+1;
}

int main()
{
    in>>n;
    for(int i=1; i<=n; i++)
        in>>v[i];
    in>>m;
    while(m>0)
    {
        in>>type>>param;
        if(type==0)
            out<<subtask1(1,n,param)<<"\n";
        if(type==1)
            out<<subtask2(1,n,param)<<"\n";
        if(type==2)
            out<<subtask3(1,n,param)<<"\n";
        m--;
    }
    return 0;
}