Cod sursa(job #873626)

Utilizator Barcau_EmanuelBarcau Emanuel Barcau_Emanuel Data 7 februarie 2013 14:56:58
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include<fstream>
using namespace std;
int a[100000],n,m,i,j,pos,x,o,y,y1;

int bc0(int pos)
{
    int st,dr,mid;
    pos=0;
    st=1;dr=n;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(a[mid]>x) dr=mid-1;
        else if(a[mid]<x) st=mid+1;
        else {pos=1;  st=mid+1;}
    }
    y1=dr;
    return pos;
}

int bc1(int pos)
{
    int st,dr,mid;
    pos=0;
    st=1;
    dr=n;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(a[mid]>x) dr=mid-1;
        else if(a[mid]<x) st=mid+1;
        else {pos=1; st=mid+1;}
    }
    y1=dr;
    return y1;
}

int bc2(int y1)
{
    int st,dr,mid;
    st=1; dr=n; pos=0;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(a[mid]>=x) {y1=mid; dr=mid-1;}
        else st=mid+1;
    }
    return y1;
}

int main ()
{
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>a[i];
    }
    f>>m;
    for(o=1;o<=m;o++)
    {
        f>>y>>x;
        if(y==0) { if(bc0(pos)==1) g<<y1<<"\n";
                  else g<<-1<<"\n"; }
        else if(y==1) g<<bc1(pos)<<"\n";
        else g<<bc2(y1)<<"\n";
    }
    return 0;
}