Cod sursa(job #2071992)

Utilizator rares1012Rares Cautis rares1012 Data 21 noiembrie 2017 11:41:20
Problema Cautare binara Scor 80
Compilator c Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <stdlib.h>

int v[100001];
int n;

int cer1(int x){
    int r,p;
    p=1<<17;
    r=0;
    while(p>0)
    {
        if(r+p<n && v[r+p]<=x)
            r+=p;
        p/=2;
    }
    if(v[r]==x)
        return r;
    return -1;
}

int cer2(int x){
    int r,p;
    p=1<<17;
    r=0;
    while(p>0)
    {
        if(r+p<=n && v[r+p]<=x)
            r+=p;
        p/=2;
    }
    return r;
}

int cer3(int x){
    int r,p;
    p=1<<17;
    r=0;
    while(p>0)
    {
        if(r+p<=n && v[r+p]<x)
            r+=p;
        p/=2;
    }
    return r+1;
}

int rez(int cer,int x){
    if(cer==0)
        return cer1(x);
    else if(cer==1)
        return cer2(x);
    return cer3(x);
}

int main()
{
    int m,i,a,b;
    FILE*fi,*fo;
    fi=fopen("cautbin.in","r");
    fo=fopen("cautbin.out","w");
    fscanf(fi,"%d",&n);
    for(i=1;i<=n;i++)
        fscanf(fi,"%d",&v[i]);
    fscanf(fi,"%d",&m);
    for(i=0;i<m;i++)
    {
        fscanf(fi,"%d%d",&a,&b);
        fprintf(fo,"%d\n",rez(a,b));
    }
    fclose(fi);
    fclose(fo);
    return 0;
}