Cod sursa(job #1835611)

Utilizator rares1012Rares Cautis rares1012 Data 27 decembrie 2016 11:17:46
Problema Cautare binara Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.12 kb
#include <stdio.h>
#include <stdlib.h>

int v[100000];
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,r,p,a,b;
    FILE*fi,*fo;
    fi=fopen("cautbin.in","r");
    fo=fopen("cautbin.out","w");
    fscanf(fi,"%d",&n);
    for(i=0;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)+1);
    }
    fclose(fi);
    fclose(fo);
    return 0;
}