Cod sursa(job #1096542)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 2 februarie 2014 12:11:05
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <cstdio>

using namespace std;

int n,i,a[100010],m,t,x,pp;

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


int main()
{
    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);
         if (t==0)
           {
               pp=cb(x);
               if (a[pp]==x)
                {
                    for (;a[pp+1]==x;pp++);
                    printf("%d\n", pp);
                }
                else printf("-1\n");

           }
          else if (t==1)
            {
                pp=cb(x);
                for (;a[pp+1]==x;pp++);
                printf("%d\n", pp);
            }
           else
             {
                 pp=cb(x);
                 for (;a[pp-1]==x;pp--);
                 if (a[pp]==x) printf("%d\n", pp);
                  else printf("%d\n", pp+1);
             }
     }

    return 0;
}