Cod sursa(job #1250169)

Utilizator armandpredaPreda Armand armandpreda Data 27 octombrie 2014 20:58:39
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <cstdio>

using namespace std;

int n,v[100005];
int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    int m,t,a,i;
    scanf("%d",&n);
    for(i=1;i<=n;++i)
        scanf("%d",v+i);
    scanf("%d",&m);
    for(i=1;i<=m;++i)
    {
        scanf("%d%d",&t,&a);
        int st=1,dr=n,mij,s0=-1,s1=0,s2=100001;
        if(t==0)
        {
            while(st<=dr)
            {
                mij=(dr-st)/2+st;
                if(a<v[mij])
                    dr=mij-1;
                else
                {
                    if(a==v[mij] and ((s0!=-1 and s0<mij) or s0==-1))
                        s0=mij;
                    st=mij+1;
                }
            }
            printf("%d\n",s0);
        }
        if(t==1)
        {
            while(st<=dr)
            {
                mij=(dr-st)/2+st;
                if(a<v[mij])
                    dr=mij-1;
                else
                {
                    if(s1<mij)
                        s1=mij;
                    st=mij+1;
                }
            }
            printf("%d\n",s1);
        }
        if(t==2)
        {
            while(st<=dr)
            {
                mij=(dr-st)/2+st;
                if(a<=v[mij])
                {
                    if(s2>mij)
                        s2=mij;
                    dr=mij-1;
                }
                else
                    st=mij+1;
            }
            printf("%d\n",s2);
        }
    }
    return 0;
}