Cod sursa(job #661596)

Utilizator sorina.vasileVasile Sorina sorina.vasile Data 14 ianuarie 2012 19:03:28
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<fstream>
#include<iostream>
using namespace std;
int v[100002],N;

int cazul_2(int val)
{  int mid,st=1,dr=N,poz;
while(st<dr)
  {mid=(st+dr)/2;
   if(v[mid]<val)
     st=mid+1;
   else dr=mid; }
poz=mid;
if(v[poz]<val) poz++;
return poz; }

int cazul_1(int val)
{  int mid,st=1,dr=N,poz;
while(st<dr)
   {mid=(st+dr)/2;
   if(v[mid]<=val)
     st=mid+1;
   else dr=mid; }
poz=dr;
if(v[poz]>val) poz--;
return poz; }

int cazul_0(int val)
{ int mid,st=1,dr=N,poz;
while(st<=dr)
{ mid=(st+dr)/2;
 if(v[mid]<=val)   
   st=mid+1;        
 else  
  dr=mid-1; }
poz=st;
if(v[poz]>val) poz--;
if(v[poz]==val)return poz;
return -1;}
 


int main() 
{ int N, M, caz, x, poz;

fstream f("cautbin.in", ios::in);
fstream g("cautbin.out", ios::out);

f>>N;
for(int i=1;i<=N;i++)
f>>v[i];

f>>M;
for(int i=1;i<=M;i++){
 f>>caz>>x;
 if(caz==0) g<<cazul_0(x)<<endl;                                    
 if(caz==1) g<<cazul_1(x)<<endl; 
 if(caz==2) g<<cazul_2(x)<<endl; 
}

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