Cod sursa(job #2184218)

Utilizator AvramDanielAvram Daniel AvramDaniel Data 23 martie 2018 20:49:37
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
using namespace std;
int n,a[100010],q,c,d;
int cautbin0(int x)
{
    int l=1,r=n,m;
    while(l<=r)
    {
        m=(r+l)/2;
        if(a[m]<=x) l=m+1;
        else r=m-1;
        //cout<<m<<' ';
    }
    if(a[m]==x)return m;
    if(a[m-1]==x) return m-1;
    return -1;

}

int cautbin1(int x)
{
    int l=1,r=n,m;
    while(l<=r)
    {
        m=(r+l)/2;
        if (a[m]<=x) l=m+1;
        else r=m-1;
    }
    if(a[m]==x) return m;
    if(a[m]>x) return m-1;
}

int cautbin2(int x)
{
    int l=1,r=n,m;
    while(l<=r)
    {
        m=(r+l)/2;
        if(a[m]<x)l=m+1;
        else r=m-1;
       // cout<<m<<' ';
    }
    if(a[m]>=x)return m;
    else return m+1;

}
int main()
{
    ifstream cin("cautbin.in");
    ofstream cout("cautbin.out");
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    cin>>q;
    for(int i=1;i<=q;i++)
    {
        cin>>c>>d;
        if(c==0) cout<<cautbin0(d);
        else if(c==1) cout<<cautbin1(d);
        else cout<<cautbin2(d);

    }
    return 0;
}