Cod sursa(job #2298638)

Utilizator razvan1403razvan razvan1403 Data 8 decembrie 2018 12:03:19
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include<fstream>
#include<iostream>
using namespace std;
int n, m, v[100002];
int cautbin0(int nr)
{
    long long int mid;
    int b=1, e=n;
    while(b<e)
    {
    mid=(b+e)/2;
    if((v[mid]==nr) && (v[mid+1]!=nr))
        return mid;
    if(v[mid]<=nr)
            b=mid+1;
        else
            e=mid;
    }
    if(v[b]==nr)
        return b;
    return -1;

}
int cautbin1(int nr)
{
    long long int mid;
    int b=1, e=n;
    while(b<e)
    {
    mid=(b+e)/2;
        if(v[mid]<=nr)
            b=mid+1;
        else
            e=mid;
    }
    if (v[b]>nr)
       --b;
    return b;
}
int cautbin2(int nr)
{
    long long int mid;
    int b=1, e=n;
    while(b<e)
    {
    mid=(b+e)/2;
        if(v[mid]>=nr)
            e=mid;
        else
            b=mid+1;
    }
    if (v[mid]<nr)
       ++ mid;
    return mid;
}
int main ()
{
    int c, nr, i;
    ifstream in ("cautbin.in");
    ofstream out ("cautbin.out");
    in>>n;
    for(i=1;i<=n;i++)
        in>>v[i];
    in>>m;
    for(i=0;i<m;i++)
    {
        in>>c>>nr;
        if(!c)
            out<<cautbin0(nr)<<"\n";
        else if(c==1)
            out<<cautbin1(nr)<<"\n";
        else
            out<<cautbin2(nr)<<"\n";
    }
    in.close();
    out.close();
    return 0;
}