Cod sursa(job #245893)

Utilizator hulparuadrianhulparu adrian hulparuadrian Data 19 ianuarie 2009 12:16:03
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include<iostream>
#include<fstream>
using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");
int x,n,m,a,v[1000];
int f0(int x)
{
int     low=1;
int     high=n;
    while(1)
    {
            
            int mid= (low+high)/2;
            if (v[mid]==x) {while(v[mid+1]==x) mid++; return mid;}
            if(v[mid]>x) high=mid;
            else low=mid;
            } 
     
     }

int f1(int x)
{
     int     low=1;
int     high=n;
    while(1)
    {

            if (high-low==1) return low;            
            int mid= (low+high)/2;
while(v[mid-1]==x) mid--;
            if(v[mid]>=x) high=mid;
            else low=mid;
            } 
     
     }

int f2(int x)
{
     int     low=1;
int     high=n;
    while(1)
    {

            if (high-low==1) return high;            
            int mid= (low+high)/2;
while(v[mid+1]==x) mid++;
            if(v[mid]>=x) high=mid;
            else low=mid;}
     }

int main()
{
f>>n;
for(int i=1;i<=n; f>>v[i++]);
f>>m;
for(int i=1;i<=m;i++)
      {  f>>a>>x;
        switch (a)
       { case 0: g<<f0(x)<<"\n";break;   
        case 1: g<<f1(x)<<"\n";break;
        case 2: g<<f2(x)<<"\n";break;    
        }
        }
    
    f.close();
    g.close();
    return 0;
    }