Cod sursa(job #1088112)

Utilizator robx12lnLinca Robert robx12ln Data 20 ianuarie 2014 10:35:20
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.01 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;
            while(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);
                    break;
                }else{
                    nr=0;
                }
            }
            if(nr==0){
                fprintf(fout,"-1");
            }
        }
        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;
}