Cod sursa(job #1882734)

Utilizator adriashkin.07alehandru69 adriashkin.07 Data 17 februarie 2017 14:11:37
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;

int n,m,i,j;
long long st,dr,mid,fin,a[100010],x,y;

ll cb1(ll st, ll dr){
	mid=(st+dr)/2;
	if(st==mid) return fin;
	if(a[mid]>y) {
	fin=st;
	cb1(st,mid);}
	else{ 
	if(a[mid]==y)fin=mid; else fin=dr;
	cb1(mid,dr);}
}
ll cb2(ll st, ll dr)
{
 mid=(st+dr)/2;
 if(st==mid) return fin;
 if(a[mid]>=y) {fin=mid;
 cb2(st,mid);}
 else {fin=dr; cb2(mid,dr);}
}


int main()
{
   ifstream cin("cautbin.in");
   ofstream cout("cautbin.out");
   
   cin>>n;
   for(i=1;i<=n;i++) cin>>a[i];
   cin>>m;
   for(j=1;j<=m;j++)
   {
   	  cin>>x>>y;
   	    if(x==0){
   	    	cb1(1,n);
   	    	if(a[fin]==y) cout<<fin<<"\n";
   	    	else cout<<-1<<"\n";
		   }
		if(x==1)
		{
			cb1(1,n);
			if(a[fin]==y)cout<<fin<<"\n";
			else cout<<fin-1<<"\n";
		}
		if(x==2)
		{
			cb1(1,n);
			if(a[fin]!=y)cout<<fin<<"\n";
			else{
				cb2(1,n);
				cout<<fin<<"\n";	
			}
		}
	   }
	 return 0;	
}