Cod sursa(job #2455354)

Utilizator lucian2015blaugranadevil lucian2015 Data 11 septembrie 2019 15:18:26
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.2 kb
#include <fstream>
#include <bits/stdc++.h>

#define BUFFER_SIZE 262144
using namespace std;

__attribute__((always_inline)) int get_int()	
{
    static char inBuffer[BUFFER_SIZE];
    static int p = BUFFER_SIZE - 1; int number = 0;
    for(; inBuffer[p] < 47;)
    {
        ++p != BUFFER_SIZE || (fread(inBuffer, 1, BUFFER_SIZE, stdin), p = 0);
    }
	
    for(; inBuffer[p] > 47;)
    {
        number = number * 10 + inBuffer[p] - 48;
        ++p != BUFFER_SIZE || (fread(inBuffer, 1, BUFFER_SIZE, stdin), p = 0);
    }
    return number;	
}
	
 

/*const int BUFFER_SIZE = 1 << 17; 
	
char buffer[BUFFER_SIZE];	
	
int pos = BUFFER_SIZE;
	

inline char next() {
    if (pos == BUFFER_SIZE) {
        fread(buffer, 1, BUFFER_SIZE, stdin);
        pos = 0;
    }
    return buffer[pos++];	
}

inline int read() {
    int x = 0, neg = 1;
    char c = next();
    if (c == '-') {
    	neg = -1;
    }
    while (!('0' <= c && c <= '9')) {
        c = next();
	
    }
    while ('0' <= c && c <= '9') {
        x = (x << 3) + (x << 1) + (c - '0');
        c = next();
    }		
    return x * neg;
}
*/


void cautbin0(int *vect, int n, int y){
	int hi, lo, mid;
	hi = n+1;
	lo = 0;
	while ( hi - lo > 1){
		mid = ( hi + lo )/2;
			if( vect[mid] > y )
				hi = mid;
			else
				lo = mid;
	}
	if( vect[lo] != y  ||  hi == n  )
		printf("%d\n",-1);
	else
		printf("%d\n",lo);

}

void cautbin1(int *vect, int n, int y){
	int hi, lo, mid;
	hi = n+1;
	lo = 0;
	while ( hi - lo > 1){
		mid = ( hi + lo )/2;
			if( vect[mid] > y )
				hi = mid;
			else
				lo = mid;
	}
		printf("%d\n",lo);
}
void cautbin2(int *vect, int n, int y){
	int hi, lo, mid;
	hi = n;
	lo = -1;
	while ( hi - lo > 1){
		mid = ( hi + lo )/2;
			if( vect[mid] < y )
				lo = mid;
			else
				hi = mid;
	}
	  printf("%d\n",hi);

}




int main(){
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);

 int *vect, n, cerinte, i, x, y;
  n = get_int();
 vect = new int[n+1];
 for( i = 1; i <= n; i++){
 	vect[i] = get_int();
 }
 cerinte = get_int();
 for( i = 1; i <= cerinte; i++){
 	x = get_int();
 	y = get_int();
 	if( x == 0 ) {
 		cautbin0(vect, n, y);
 	}
 	else if( x == 1 ){
 		cautbin1(vect, n, y);
 	}
 	else if( x == 2 ){
 		cautbin2(vect, n, y);
 	}

 }

}