Cod sursa(job #2175273)

Utilizator VionaFFilip Yvonna VionaF Data 16 martie 2018 16:23:16
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
//
//  main.cpp
//  Masterpiece
//
//  Created by Yvonna Filip on 02/03/2018.
//  Copyright © 2018 Yvonna Filip. All rights reserved.
//


#include <fstream>
#include <iostream>

using namespace std;
ifstream in ("cautbin.in");
ofstream out("cautbin.out");
int n, m, x, v[100001],q,p;

int upperbin(int v[], int x)
{
    if(x<v[1])
        return -1;
    
    int st=1;
    int dr=n;
    int mijl;
    
    while(st<=dr)
    {
        mijl=(st+dr)/2;
        if(v[mijl]<=x)
            st=mijl+1;
        if(v[mijl]>x)
            dr=mijl-1;
    }
    return dr;
}
int lowerbin(int v[], int x)
{
    
    int st=1;
    int dr=n;
    int mijl;
    
    while(st<=dr)
    {
        mijl=(st+dr)/2;
        if(v[mijl]<x)
            st=mijl+1;
        if(v[mijl]>=x)
            dr=mijl-1;
    }
    return st;
}




int main(){
    in>>n;
    
    
    for(int i=1;i<=n;i++)
        in>>v[i];
    
    in>>m;
    for(int i=1;i<=m;i++)
    {
        in>>q>>x;
        if(q==0)
        {
            p=upperbin(v, x);
            if(p>0 && v[p]==x)
                out<<p<<'\n';
            else
                out<<-1<<'\n';
            
        }
        if(q==1)
        {
            p=upperbin(v, x);
            if(p>0 && v[p]<=x)
                out<<p<<'\n';
            
        }
        if(q==2)
        {
            p=lowerbin(v, x);
            if(p<=n && v[p]>=x)
                out<<p<<'\n';
        }
        
    }
    
    
    
    
    
    return 0;
}