Cod sursa(job #651677)

Utilizator I.AlexandruIlie Alexandru I.Alexandru Data 21 decembrie 2011 01:15:28
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include<fstream>
#define maxn 100001
using namespace std;

int n, v[maxn], m, x, j, choice;
ifstream f("cautbin.in");
ofstream g("cautbin.out");

int c0(int v[], int value, int low, int high)
{int mid;
while(low<=high)
     {mid=low+(high-low)/2;
      if(v[mid]==value)
        if(v[mid+1]!=value) 
          return mid;
      if(v[mid]>value)
        high=mid-1;
      else low=mid+1; 
     }  
return -1;
}

int c1(int v[], int value, int low, int high)
{int mid;
while(low<=high)
     {mid=low+(high-low)/2;
      if(v[mid]<=value)
        {if(v[mid+1]>value && mid+1<=high)
           return mid;
         if(mid+1>high)
           return mid;
        }
      if(v[mid]>value)
        high=mid-1;
      else low=mid+1; 
     }     
}

int c2(int v[], int value, int low, int high)
{int mid;
while(low<=high)
     {mid=low+(high-low)/2;
      if(v[mid]>=value)
        {if(v[mid-1]<value && mid-1>=low)
           return mid;
         if(mid-1<low)
           return mid;
        }
      if(v[mid]<value)
        low=mid+1;
      else high=mid-1;
     }     
}

int main()
{f>>n;
for(j=1; j<=n; j++)
   f>>v[j];    

f>>m;
for(j=1; j<=m; j++)
   {f>>choice;
    f>>x;
    switch(choice)
         {case 0: g<<c0(v, x, 1, n)<<endl;
                  break;
          case 1: g<<c1(v, x, 1, n)<<endl;
                  break;
          case 2: g<<c2(v, x, 1, n)<<endl;
                  break;
         }
   }

f.close();
g.close();
return 0;
}