Cod sursa(job #3197624)

Utilizator stefanvilcescuStefan Vilcescu stefanvilcescu Data 27 ianuarie 2024 11:00:48
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb

#include <stdio.h>
#include <math.h>

int v[100000];

int main()
{
    FILE *fin, *fout;
    int n, m, i, st, mij, dr, x, nr;
    fin=fopen("cautbin.in", "r");
    fscanf(fin, "%d", &n);
    for(i=0; i<n; i++)
        fscanf(fin, "%d", &v[i]);
    fscanf(fin, "%d", &m);
    fout=fopen("cautbin.out", "w");
    for(i=0; i<m; i++){
        fscanf(fin, "%d%d", &x, &nr);
        if(x==0){
            nr++;
            st=-1;
            dr=n-1;
            while(dr-st>1){
                mij=(st+dr)/2;
                if(v[mij]<nr)
                    st=mij;
                else
                    dr=mij;
            }
            if(nr-1==v[st])
                fprintf(fout, "%d", dr);
            else
                fprintf(fout, "-1");
        }else if(x==1){
            nr++;
            st=-1;
            dr=n-1;
            while(dr-st>1){
                mij=(st+dr)/2;
                if(v[mij]<nr)
                    st=mij;
                else
                    dr=mij;
            }
            fprintf(fout, "%d", dr);
        }else{
            st=-1;
            dr=n-1;
            while(dr-st>1){
                mij=(st+dr)/2;
                if(v[mij]<nr)
                    st=mij;
                else
                    dr=mij;
            }
            fprintf(fout, "%d", dr+1);
        }
        fprintf(fout, "\n");
    }
    fclose(fin);
    fclose(fout);
    return 0;
}