Cod sursa(job #906407)

Utilizator arvinte.razvanarvinte razvan arvinte.razvan Data 6 martie 2013 20:12:16
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.92 kb
#include <cstdio>
using namespace std;
int nr;
long mij,st,dr,n,m,i,ok=1;;
long long x,a[100001];
void binar()
{
    if (nr==0)
    {
            st=1;
            dr=n;
            mij=(st+dr)/2;
            while (st<=dr)
            {
                if(a[mij]==x)
                {
                    if (a[mij+1]!=x) {printf("%ld \n",mij);ok=0;break;}
                }
                if (a[mij+1]<=x)
                {st=mij+1;}
                else
                if (a[mij-1]>=x)
                 {dr=mij-1;}

                if (a[mij-1]<x && a[mij+1]>x && a[mij]!=x) break;
                mij=(st+dr)/2;
            }
            if (ok==1) printf("-1 \n");
            ok=1;
    }

    if (nr==1)
    {
            st=1;
            dr=n;
            mij=(st+dr)/2;
            while (st<=dr)
            {
                if (a[mij+1]==0) {printf("%ld \n",mij);break;}
                if (a[mij+1]>x && a[mij]<=x) {printf("%ld \n",mij);break;}
                 if (a[mij+1]<=x)
                 {st=mij+1;}
                 else
                if (a[mij-1]>=x)
                 {dr=mij-1;}
                mij=(st+dr)/2;
            }
    }

    if (nr==2)
    {
            st=1;
            dr=n;
            mij=(st+dr)/2;
            while (st<=dr)
            {
                if (a[mij-1]<x && a[mij]>=x) {printf("%ld \n",mij);break;}
                  if (a[mij-1]>=x)
                  {dr=mij-1;}
                  else
                 if (a[mij+1]<=x)
                 {st=mij+1;}
                mij=(st+dr)/2;
            }
    }

}

int main()
{
    freopen("cautbin.in","rt",stdin);
    freopen("cautbin.out","wt",stdout);
    scanf("%ld",&n);
    for(i=1;i<=n;i++)
    {
    scanf("%lld",&a[i]);
    }
    scanf("%ld",&m);
    for (i=1;i<=m;i++)
    {
        scanf("%d",&nr);
        scanf("%lld",&x);
        binar();
    }
    return 0;
}