Cod sursa(job #1089706)

Utilizator robx12lnLinca Robert robx12ln Data 21 ianuarie 2014 21:21:08
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.89 kb
#include<cstdio>
using namespace std;
FILE * fin=fopen("cautbin.in","r");
FILE * fout=fopen("cautbin.out","w");
long long v[100001],x,y;
int m,n,i,j,u,mid,p,nr;
int main(){
    fscanf(fin,"%d",&n);
    for(i=1;i<=n;i++){
        fscanf(fin,"%lld",&v[i]);
    }
    fscanf(fin,"%d",&m);
    for(i=1;i<=m;i++){
        fscanf(fin,"%lld%lld",&y,&x);
        if(y==0){
            nr=1;
            p=1;
            u=n;
            while(p<=u){
                mid=(p+u)/2;
                if(v[mid]<=x){
                    p=mid+1;
                }else{
                    u=mid-1;
                }
            }
            if(v[u]==x){
                fprintf(fout,"%d\n",u);
            }else{
                nr=0;
            }
            if(nr==0){
                fprintf(fout,"-1\n");
            }
        }
        if(y==1){
            while(x>=1){
                p=1;
                u=n;
                while(p<=u){
                    mid=(p+u)/2;
                    if(v[mid]<=x){
                        p=mid+1;
                    }else{
                        u=mid-1;
                    }
                }
                if(v[u]==x){
                     fprintf(fout,"%d\n",u);
                    break;
                }else{
                    x--;
                }
            }
        }
        if(y==2){
            while(x<=v[n]){
                p=1;
                u=n;
                while(p<=u){
                    mid=(p+u)/2;
                    if(v[mid]>=x){
                        u=mid-1;
                    }else{
                        p=mid+1;
                    }
                }
                if(v[p]==x){
                     fprintf(fout,"%d\n",p);
                    break;
                }else{
                    x++;
                }
            }
        }
    }
    return 0;
}