Cod sursa(job #2526122)

Utilizator DunareanuDinu Dunareanu Dunareanu Data 18 ianuarie 2020 11:58:08
Problema Cautare binara Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.55 kb
#include <stdio.h>
#include <stdlib.h>

FILE *fin , *fout;

int v[100000];

int main() {
    fin=fopen("cautbin.in","r");
    fout=fopen("cautbin.out","w");
    int n,m,i,a,e,pos,step,stinga,dreapta,mijloc;
    fscanf(fin,"%d",&n);
    for(i=0;i<n;i++) {
        fscanf(fin,"%d",&v[i]);
    }
    fscanf(fin,"%d",&m);
    for(i=0;i<m;i++) {
        fscanf(fin,"%d%d",&a,&e);
        if(a==0) {
            pos=-1;
            step=1<<20;
            while(step>0) {
                if(pos+step<n && v[pos+step]<=e) {
                    pos+=step;
                }
                step/=2;
            }
            if(pos!=-1 && v[pos]==e) {
                fprintf(fout,"%d\n",pos+1);
            }
            else {
                fprintf(fout,"-1\n");
            }
        }
        else if(a==1) {
            stinga=0;
            dreapta=n;
            while (dreapta-stinga>1) {
                mijloc=(stinga+dreapta)/2;
                if (v[mijloc]>e)
                    dreapta=mijloc;
                else
                    stinga=mijloc;
            }
            fprintf(fout,"%d\n",stinga+1);
        }
        else if(a==2) {
            stinga=0;
            dreapta=n;
            while (dreapta-stinga>1) {
                mijloc=(stinga+dreapta)/2;
                if (v[mijloc]<=e)
                    dreapta=mijloc;
                else
                    stinga=mijloc;
            }
            fprintf(fout,"%d\n",dreapta+1);
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}