Cod sursa(job #2029852)

Utilizator luanastLuana Strimbeanu luanast Data 30 septembrie 2017 15:52:11
Problema Cautare binara Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int n,m,p,u,mid,i,ok,test,x,v[100001];

int main(){
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    fin>>m;
    for(i=1;i<=m;i++){
        fin>>test>>x;
        p=1;
        u=n;
        ok=1;
        while(p<=u){
            mid=p+(u-p)/2;
            if(test==0){
                ok=0;
                if(v[mid]==x && v[mid+1]!=v[mid]){
                    fout<<mid<<"\n";
                    ok=1;
                    break;
                }
            }
            else{
                if(test==1){
                    if(v[mid]<=x && (v[mid+1]>x || v[mid]==u)){
                        fout<<mid<<"\n";
                        break;
                    }
                }
                else{
                    if(v[mid]>=x && (v[mid-1]<x || mid==u)){
                        fout<<mid<<"\n";
                        break;
                    }
                }
            }
            if(test==0 || test==1){
                if(v[mid]<=x)
                    p=mid+1;
                else
                    u=mid-1;
            }
            if(test==2){
                if(v[mid]<x)
                    p=mid+1;
                else
                    u=mid-1;
            }
        }
        if(!ok)
            fout<<"-1\n";
    }

}