Cod sursa(job #198806)

Utilizator free2infiltrateNezbeda Harald free2infiltrate Data 15 iulie 2008 10:53:37
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>

int S[100001],n;

int op1(int x)
{
    int mid,l,r;
    for (l=1,r=n; l<=r;)
     {  		
     mid = l + (r-l) / 2;
     if (x < S[mid]) r = mid-1;
     else if (S[mid] < x) l = mid+1;
     else return mid;
     }
return -1;
}

int op2(int x)
{
    int mid,l,r,last=0;
    for (l=1,r=n;l<=r;)
    {
    mid = l + (r-l) / 2;
    if (S[mid]<=x) last = mid, l = mid+1;
    else r = mid -1;
    }
return last;
}

int op3(int x)
{
    int mid,l,r,last=0;
    for (l=1,r=n;l<=r;)
    {
    mid = l + (r-l) / 2;
    if (S[mid]>=x) last = mid, r = mid-1;
    else l = mid +1;
    }
return last;
}

int main()
{
    FILE *in,*out;
    in = fopen("cautbin.in","r");
    out = fopen("cautbin.out","w");
    int m,o,x,i;
    fscanf(in,"%d",&n);
    for (i=1;i<=n;i++) fscanf(in,"%d",&S[i]);
    fscanf(in,"%d",&m);
    for (;m;m--)
    {
        printf("%d\n",m);
        fscanf(in,"%d %d",&o,&x);
        if (o==0) fprintf(out,"%d\n",op1(x));
        else if (o==1) fprintf(out,"%d\n",op2(x));
        else fprintf(out,"%d\n",op3(x));
    }
}