Cod sursa(job #528877)

Utilizator mening12001Andrei Geogescu mening12001 Data 3 februarie 2011 17:21:44
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.57 kb
#include<iostream.h> 
#include<fstream.h> 
struct intrebare{int a,x;}; 
int a[100001]; 
int  cautab1(int st,int dr,int x) 
{int mij,g=0,i,z; 
z=dr; 
while(st<=dr) 
{mij=(st+dr)/2; 
if(a[mij]==x) 
{g=1; 
break;} 
if(a[mij]<x) 
st=mij+1; 
if(a[mij]>x) 
dr=mij-1; 
} 
if(g==1) 
return mij; 
else
return -1;} 
///////////////////////////// 
int cautab2(int st,int dr,int x) 
{int mij,g=0,i,z; 
z=dr; 
while(st<=dr) 
{mij=(st+dr)/2; 
if(a[mij]<=x) 
{g=1; 
break;} 
if(a[mij]>x) 
dr=mij-1; 
} 
if(g==1) 
return mij; 
else
 
return -1;} 
////////////////////////// 
int cautab3(int st,int dr,int x) 
{int mij,g=0,i; 
while(st<=dr) 
{mij=(st+dr)/2; 
if(a[mij]>=x) 
    
{g=1; 
break;} 
if(a[mij]<x) 
    
st=mij+1; 
} 
if(g==1) 
 return mij; 
   
else
   
return -1;} 
///////////////////// 


 
int main() 
{int m,i,n,z,y,j; 
intrebare b[100001];     
ifstream f("cautbin.in"); 
ofstream h("cautbin.out"); 
f>>n; 
for(i=1;i<=n;i++) 
    
f>>a[i]; 
f>>m; 

for(j=1;j<=m;j++) 
{f>>b[j].a>>b[j].x; 
    
 

if(b[j].a==0) 
  
{y=cautab1(1,n,b[j].x); 
   
for(i=y;i<=n;i++) 
       
if(a[i]!=a[y]) 
           
{h<<i-1<<endl; 
          
break;} 
   
 
  
} 
    
 
   
 
    
 
if(b[j].a==1) 
{y=cautab2(1,n,b[j].x); 
   
for(i=y;i<=n;i++) 
        
if(a[i]>b[j].x) 
        
{h<<i-1<<endl; 
        
break;} 
       
} 
if(b[j].a==2) 
{y=cautab3(1,n,b[j].x); 
   
for(i=y;i>=1;i=i-1) 
       
if(a[i]<b[j].x) 
        
{h<<i+1<<endl; 
       
break;} 
       
} 

 

} 
        
 
return 0;}