Cod sursa(job #2627056)

Utilizator paulvlad43Vlad Paul Munteanu paulvlad43 Data 9 iunie 2020 15:05:28
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.66 kb
#include <iostream>
#include <fstream>
using namespace std;
#define N 100010
int v[N];
 
int subpunctA (int s, int u, int x) {
    int m;
 
    while (s <= u) {
        m = (s + u) / 2;
        if (v[m] <= x)
            s = m + 1;
        else
            u = m - 1;
    }
    m = (s + u) / 2;
 	while (v[m+1]==x)
 		m++;
    if (v[m]==x)
        return m;
    return -1;
}
 
int subpunctB (int s, int u, int x) {
    int m, n = u;
 
    while (s < u){
        m = (s + u) / 2;
        if (v[m] <= x)
            s = m + 1;
        else
            u = m;
    }
 
    m = (s + u) / 2;
    while (v[m]<=x){
    	m++;
	}
    return m;
}
 
int subpunctC (int s, int u, int x) {
    int m;
 
    while (s < u) {
        m = (s + u) / 2;
        if (v[m] < x)
            s = m + 1;
        else
            u = m;
    }
    
    m = (s + u) / 2;
	while (v[m]<=x)
		m--;
    return m;
}
 
int main () {
    int i, n, m, tip, x;
 
    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>>x;
          if (tip == 0){
          	if (log==1)
          		f1<<"\n";
 
            f1<<subpunctA(1, n, x);
            if (log==0)
            	log=1;
          }
          if (tip == 1){
		  	if (log==1)
          		f1<<"\n";
 
        	f1<<subpunctB(1,n,x);
        	if (log==0)
            	log=1;
        }
          if (tip == 2){
		     if (log==1)
          		f1<<"\n";
             f1<<subpunctC(1,n,x);
             if (log==0)
             	log=1;
         }
    }
 
	return 0;
}