Cod sursa(job #2611141)

Utilizator paulvlad34Munteanu Vlad Paul paulvlad34 Data 6 mai 2020 14:43:27
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.68 kb
#include <iostream>
#include <fstream>
using namespace std;
#define N 100010
int v[N];

int bsearch0 (int s, int u, int key) {
    int m;
 
    while (s <= u) {
        m = (s + u) / 2;
        if (v[m] <= key)
            s = m + 1;
        else
            u = m - 1;
    }
    m = (s + u) / 2;
 
    if (v[m] > key) m --;
    if (v[m] == key)
        return m;
    return -1;
}
 
int bsearch1 (int s, int u, int key) {
    int m, n = u;
 
    while (s < u){
        m = (s + u) / 2;
        if (v[m] <= key)
            s = m + 1;
        else
            u = m;
    }
 
    m = (s + u) / 2;
    if (v[m] > key)
       -- m;
    return m;
}
 
int bsearch2 (int s, int u, int key) {
    int m;
 
    while (s < u) {
        m = (s + u) / 2;
        if (v[m] < key)
            s = m + 1;
        else
            u = m;
    }
    
    m = (s + u) / 2;
    if (v[m] < key)
       ++ m;
    return m;
}
 
int main () {
    int i, n, m, tip, val;
 
    ifstream f("cautbin.in");
    ofstream f1("cautbin.out");
    f>>n;
    for (i = 1; i <= n; ++ i)
        f>>v[i];
    f>>m;
 	int log=0;
    while (m --){
          f>>tip>>val;
          if (tip == 0){
          	if (log==1)
          		f1<<"\n";

            f1<<bsearch0(1, n, val);
            if (log==0)
            	log=1;
          }
          if (tip == 1){
		  	if (log==1)
          		f1<<"\n";

        	f1<<bsearch1(1,n,val);
        	if (log==0)
            	log=1;
        }
          if (tip == 2){
		     if (log==1)
          		f1<<"\n";
             f1<<bsearch2(1,n,val);
             if (log==0)
             	log=1;
         }
    }

	return 0;
}