Cod sursa(job #1962256)

Utilizator mateibanuBanu Matei Costin mateibanu Data 11 aprilie 2017 17:45:07
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>

using namespace std;

FILE*f=fopen("cautbin.in","r");
FILE*g=fopen("cautbin.out","w");

int v[100010];
int n;

int caut0(int x){
    int p,u,mij;
    p=1;u=n;
    while (p<=u){
        mij=p+(u-p)/2;
        if (v[mij]<=x) p=mij+1;
        else u=mij-1;
    }
    if (v[u]==x) return u;
    else return -1;
}

int caut1(int x){
    int p,u,mij;
    p=1;u=n;
    while (p<=u){
        mij=p+(u-p)/2;
        if (v[mij]<=x) p=mij+1;
        else u=mij-1;
    }
    return u;
}

int caut2(int x){
    int p,u,mij;
    p=1;u=n;
    while (p<=u){
        mij=p+(u-p)/2;
        if (v[mij]<x) p=mij+1;
        else u=mij-1;
    }
    return p;
}

int main()
{
    int i,m,x,r,p;
    fscanf(f,"%d",&n);
    for (i=1;i<=n;i++)
        fscanf(f,"%d",&v[i]);
    fscanf(f,"%d",&m);
    for (i=1;i<=m;i++){
        fscanf(f,"%d%d",&p,&x);
        if (p==0) r=caut0(x);
        else if (p==1) r=caut1(x);
        else r=caut2(x);
        fprintf(g,"%d\n",r);
    }
    fclose(f);
    fclose(g);
    return 0;
}