Cod sursa(job #1665818)

Utilizator Cristi01052Tudorache Christian Cristi01052 Data 27 martie 2016 13:22:56
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include<stdio.h>
using namespace std;
int v[100005];
int main ()
{
    FILE *in,*out;
    in=fopen("cautbin.in","r");
    out=fopen("cautbin.out","w");
    int n;
    fscanf(in,"%d",&n);
    int sol=0,ct=0,put=1;
    while (put<n)
    {
        put=put*2;
        ct++;
    }
    int i,pas=1<<ct-1;
    for (i=1;i<=n;i++)
    {
        fscanf(in,"%d",&v[i]);
    }
    int k,x,intr;
    fscanf(in,"%d",&k);
    for (i=0;i<k;i++)
    {
        fscanf(in,"%d%d",&intr,&x);
        pas=1<<ct-1;
        sol=0;
        if (intr==0)
        {
            while(pas>0)
            {
                if(sol+pas <=n && v[sol+pas]<x)
                    sol+=pas;
                pas>>=1;
            }
            if (v[sol+1]==x)
                fprintf(out,"%d\n",sol+1);
            else
                fprintf(out,"-1\n");
        }
        if (intr==1)
        {
            while(pas>0)
            {
                if(sol+pas <=n && v[sol+pas]<=x)
                    sol+=pas;
                pas>>=1;
            }
            fprintf(out,"%d\n",sol);
        }
        if (intr==2)
        {
            while(pas>0)
            {
                if(pas+sol <=n && v[sol+pas]<x)
                    sol+=pas;
                pas>>=1;
            }
            fprintf(out,"%d\n",sol+1);
        }
    }
    return 0;
}