Cod sursa(job #1263169)

Utilizator GooggaIoana Iaru Googga Data 13 noiembrie 2014 23:55:23
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
 int v[100005];
int bs(int st, int dr, int a,int nr)
{
    int med,last=-1;
    if(nr==0)
    {
        while(st<=dr)
        {
            med=(st+dr)>>1;
            if(a<=v[med])
            {
                last=med;
                st=med+1;
            }
            else
                dr=med-1;
             }
        if(v[last]>a)
            last--;
        if(v[last]==a)
        return last;
        return -1;
    }
    if(nr==1)
    {
        while(st<=dr)
        {
            med=(st+dr)>>1;
            if(v[med]<=a)
            {
                last=med;
                st=med+1;
            }
            else
                dr=med-1;
        }
        return last;
    }
    if(nr==2)
    {
        while(st<=dr)
        {
            med=(st+dr)>>1;
            if(v[med]>=a)
            {
                last=med;
                dr=med-1;
            }
            else
                st=med+1;
        }
        return last;
    }
 
}

int main() {
    int n,m,nr,x;
    in>>n;
    for(int i=1;i<=n;i++)
        in>>v[i];
    sort(v+1,v+n+1);
    in>>m;
    for(int i=1;i<=m;i++)
    {
        in>>nr>>x;
        out<<bs(1,n,x,nr)<<'\n';
    }
    return 0;
}