Cod sursa(job #1001913)

Utilizator acomAndrei Comaneci acom Data 26 septembrie 2013 15:35:55
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.6 kb
#include<cstdio>
using namespace std;
int n,m,t,x,a[100005];
int cb(int tip, int val)
{
    int i,st=1,dr=n,mij;
    switch (tip)
        {
            case 0:
                {
                    while (st<=dr)
                        {
                            mij=(st+dr)/2;
                            if (a[mij]<=val) st=mij+1;
                            else dr=mij-1;
                        }
                    if (a[st-1]==val) return st-1;
                    else return -1;
                } break;
            case 1:
                {
                    while (st+1<dr)
                        {
                            mij=(st+dr)/2;
                            if (a[mij]<=val) st=mij;
                            else dr=mij-1;
                        }
                    if (st+1==dr) return st;
                    else return 0;
                } break;
            case 2:
                {
                    while (st<dr)
                        {
                            mij=(st+dr)/2;
                            if (a[mij]>=val) dr=mij;
                            else st=mij+1;
                        }
                    if (st==dr) return st;
                    else return 0;
                } break;
        }
}
int main()
{
    int i;
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d",&n);
    for (i=1;i<=n;++i)
        scanf("%d",&a[i]);
    scanf("%d",&m);
    for (i=1;i<=m;++i)
        {
            scanf("%d%d",&t,&x);
            printf("%d\n",cb(t,x));
        }
    return 0;
}