Cod sursa(job #1418218)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 12 aprilie 2015 13:18:21
Problema Cautare binara Scor 80
Compilator c Status done
Runda Arhiva educationala Marime 1.3 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100000
int v[MAXN];
int main(){
    FILE*fi,*fout;
    int i,nr,t,poz,mij,st,dr,n,x;
    fi=fopen("cautbin.in" ,"r");
    fout=fopen("cautbin.out" ,"w");
    fscanf(fi,"%d" ,&n);
    for(i=0;i<n;i++)
        fscanf(fi,"%d" ,&v[i]);
    fscanf(fi,"%d" ,&t);
    for(i=0;i<t;i++){
        fscanf(fi,"%d%d" ,&nr,&x);
        if(nr==0||nr==2){
            st=0;
            dr=n;
            while(st<=dr){
                mij=(st+dr)/2;
                if(v[mij]>=x){
                    poz=mij;
                    dr=mij-1;
                }
                else
                    st=mij+1;
            }
            if(nr==0){
               while(poz<n&&v[poz]==v[poz+1])
                  poz++;
               if(v[n-1]==v[n])
                  poz++;
               if(v[poz]!=x)
                  poz=-2;
            }
        }
        if(nr==1){
            st=0;
            dr=n;
            while(st<=dr){
                mij=(st+dr)/2;
                if(v[mij]<=x){
                    poz=mij;
                    st=mij+1;
                }
                else
                    dr=mij-1;
            }
        }
        fprintf(fout,"%d\n" ,poz+1);
    }
    fclose(fi);
    fclose(fout);
    return 0;
}