Cod sursa(job #232133)

Utilizator mihai.cuculiciCuculici Mihail mihai.cuculici Data 14 decembrie 2008 19:43:51
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<fstream>
using namespace std;
long int v[100000],n,m,i,k;
int x;
ifstream f ("cautbin.in");
ofstream g ("cautbin.out");

long int bin_s_0(int x)   
{   
    int lo, hi, mid;   
    for(lo=1,hi=n;lo<=hi;)   
    {   
        mid = lo + (hi-lo) / 2;   
        if(x<v[mid])hi=mid-1;   
        else if(v[mid]<x)lo=mid+1;   
        else return mid;   
    }   
    return -1;   
}   
  
long int bin_s_1(int x)   
{   
    int lo, hi, mid, fin=0;   
    for(lo=1,hi=n;lo<=hi;)   
    {   
        mid=lo+(hi-lo)/2;   
        if(v[mid]<=x)fin=mid, lo=mid+1;   
        else hi= mid-1;   
    }   
    return fin;   
}   
  
long int bin_s_2(int x)   
{   
    int lo, hi, mid, fin=n+1;   
    for(lo=1,hi=n;lo<=hi;)   
    {   
        mid=lo+(hi-lo)/2;   
        if(x<=v[mid])fin=mid, hi=mid-1;   
        else lo= mid+1;   
    }   
    return fin;   
}   


int main()
{
    f>>n;
    for(i=1;i<=n;i++) f>>v[i];
    f>>m;
    for(i=1;i<=m;i++)
    { 
      f>>x>>k;
      if(x==0) g<<bin_s_0(k)<<"\n";
      else if(x==1) g<<bin_s_1(k)<<"\n";
           else g<<bin_s_2(k)<<"\n";
    }
    f.close();
    g.close();
}