Cod sursa(job #2133585)

Utilizator Alex.PAlexandru Pacurar Alex.P Data 17 februarie 2018 10:19:35
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int v[100000];
int n;

int bin(int elem){
    int st=0, dr=n-1, ok;
    while(st<=dr){
        int mij=(st+dr)/2;
        if(v[mij]<=elem){
            ok=mij;
            st=mij+1;
        }else{
            dr=mij-1;
        }
    }
    return ok;
}

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