Cod sursa(job #2175730)

Utilizator xXoctavianXxStanescu Matei Octavian xXoctavianXx Data 16 martie 2018 18:42:48
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.77 kb
#include <stdio.h>
#include <math.h>
int n,t,x,m;
int stanga,dreapta,mijloc;
int v[100001];
int main()
{
    FILE* si=fopen("cautbin.in","r");
    FILE* so=fopen("cautbin.out","w");
    fscanf(si,"%d",&n);
    for(int i=0; i<n; i++) fscanf(si,"%d",&v[i]);
    fscanf(si,"%d",&m);
    for(int i=0; i<m; i++)
    {
        fscanf(si,"%d%d",&t,&x);
        if(t==0)
        {
            stanga=0;
            dreapta=n;
            bool gasit=false;
            while(dreapta-stanga>1)
            {
                mijloc=(stanga+dreapta)/2;
                if(v[mijloc]==x) gasit=true;
                if(v[mijloc]>x) dreapta=mijloc;
                else stanga=mijloc;
            }
            if(gasit) fprintf(so,"%d\n",stanga+1);
            else fprintf(so,"%d\n",-1);
        }
        if(t==1)
        {
            stanga=0;
            dreapta=n;
            while(dreapta-stanga>1)
            {
                mijloc=(stanga+dreapta)/2;
                if(v[mijloc]==x)
                {
                    stanga=mijloc;
                }
                if(v[mijloc]>x) dreapta=mijloc;
                else stanga=mijloc;
            }
            fprintf(so,"%d\n",stanga+1);
        }
        if(t==2)
        {
            stanga=0;
            dreapta=n;
            while(dreapta-stanga>1)
            {
                mijloc=(stanga+dreapta)/2;
                if(v[mijloc]==x)
                {
                    dreapta=mijloc;
                }
                else if(v[mijloc]>x) dreapta=mijloc;
                else stanga=mijloc;
            }
            if(v[stanga]>=x) fprintf(so,"%d\n",stanga+1);
            else fprintf(so,"%d\n",dreapta+1);
        }
    }
    fclose(si);
    fclose(so);
    return 0;
}