Cod sursa(job #1018541)

Utilizator Dayanna000Amegica Dayanna Dayanna000 Data 29 octombrie 2013 18:36:58
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.77 kb
#include <iostream>
#include <fstream>
using namespace std;
long a[100001],n,poz,k;
long n0(long x,long st, long dr)
   {
       k=-1;
       while(st<=dr)
         {
             poz=(st+dr)/2;
             if(x>a[poz])
               st=poz+1;
               else
             if(x<a[poz])
               dr=poz-1;
               else
               {
                   k=poz;
                   while(a[poz+1]==x)
                      poz++;
                   k=poz;
                   return k;
               }
         }
        return k;
   }
long n1(long x,long st, long dr)
   {
       while(st<=dr)
         {
             poz=(st+dr)/2;
             if(a[poz]==x)
                {
                    k=poz;
                    while(a[poz-1]==x)
                       poz--;
                    k=poz;
                    return k;
                }
                else
             if(a[poz]<x)
               {
                   k=poz;
                   st=poz+1;

               }
               else
               dr=poz-1;

         }
       return k;
   }
long n2(long x,long st, long dr)
   {
       while(st<=dr)
         {
             poz=(st+dr)/2;
             if(a[poz]>=x)
                {
                    k=poz;
                    dr=poz-1;
                }
                else
                st=poz+1;
         }
      return k;
   }

int main()
{
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    long n,m,i,x,y;
    f>>n;
    for(i=1;i<=n;i++)
      f>>a[i];
    f>>m;
    for(i=1;i<=m;i++)
      {
          f>>x>>y;
          if(x==0)
            g<<n0(y,1,n)<<'\n';
            else
          if(x==1)
                g<<n1(y,1,n)<<'\n';
            else
            g<<n2(y,1,n)<<'\n';

      }
    f.close();
    g.close();
    return 0;
}