Cod sursa(job #1423722)

Utilizator pufstarDragos Gheorghiu pufstar Data 22 aprilie 2015 14:10:23
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
using namespace std;
ifstream f("cautbin.in"); ofstream g("cautbin.out");
int N, a[100001], M, type, x;
int bs0(int n)
{
    int st=1, dr=N, mid;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(a[mid]==n) return mid;
        else if(a[mid]>n) dr=mid-1;
        else st=mid+1;
    }
    return -1;
}
int bs1(int n)
{
    int st=1, dr=N, mid;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(a[mid]<=n and (a[mid+1]>n) or mid==N) return mid;
        else if(a[mid]==n) st=mid+1;
        else if(a[mid]>n) dr=mid-1;
        else st=mid+1;
    }
    return -1;
}
int bs2(int n)
{
    int st=1, dr=N, mid;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(a[mid]>=n and a[mid-1]<n) return mid;
        else if(a[mid]==n) dr=mid-1;
        else if(a[mid]>n) dr=mid-1;
        else st=mid+1;
    }
    return -1;
}
int main()
{
    f>>N;
    for(int i=1; i<=N; i++) f>>a[i];
    f>>M;
    for(int i=1; i<=M; i++)
    {
        f>>type>>x;
        if(type==0) g<<bs0(x)<<'\n';
        else if(type==1) g<<bs1(x)<<'\n';
        else g<<bs2(x)<<'\n';
    }
    return 0;
}