Cod sursa(job #2209700)

Utilizator marcogoldPop Mihali Marco Silviu marcogold Data 4 iunie 2018 12:28:42
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fi("cautbin.in");
ofstream fo("cautbin.out");

long long n,sir[3000010],k,tip,x,poz;
int main()
{
   fi>>n;

   for(int i=1;i<=n;i++)
    fi>>sir[i];

   fi>>k;

   for(int i=1;i<=k;i++)
   {
       fi>>tip>>x;
       poz=0;

       ///0
       if(tip==0)
       {
           for(long long j=20;j>=0;j--)
           {
               if(sir[poz+(1<<j)]<=x && poz+(1<<j)<=n ) poz+=(1<<j);
           }

           if(sir[poz]==x)
            fo<<poz<<endl;
           else
            fo<<-1<<endl;
       }

       ///1
       else if(tip==1)
       {
             for(long long j=20;j>=0;j--)
           {
               if(sir[poz+(1<<j)]<=x && poz+(1<<j)<=n ) poz+=(1<<j);
           }

             fo<<poz<<endl;
       }

       ///2
       else if(tip==2)
       {
           for(long long j=20;j>=0;j--)
           {
               if(sir[poz+(1<<j)]<x && poz+(1<<j)<=n ) poz+=(1<<j);
           }

            if(sir[poz+1]==x)
                poz++;

           fo<<poz<<endl;
       }
   }

    return 0;
}