Cod sursa(job #2088310)

Utilizator whitewolf3131Ursu Laurentiu Cristian whitewolf3131 Data 14 decembrie 2017 22:36:56
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>

using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int v[100002];
int cautbin(int x, int n){
    int pas, sol=0;
    pas=1<<17;
    while(pas!=0){
        if(pas+sol<=n && v[pas+sol]<=x){
            sol+=pas;
        }
        pas/=2;
    }
    return sol;
}
int main()
{
	int n, m, z, n2;
	in>>n;
	for(int i=1; i<=n; i++){
        in>>v[i];
	}
	in>>n2;
	for(int i=1; i<=n2; i++){
        in>>m>>z;
        int aux;
        if(m==0){
            aux=cautbin(z, n);
            if(v[aux]==z){
                out<<aux<<'\n';
            }
            else
                out<<-1<<'\n';
        }
        if(m==1){
            out<<cautbin(z, n)<<'\n';
        }
        if(m==2){
            aux=cautbin(z, n);
            if(v[aux]==z){
                while(v[aux]==z){
                    aux--;
                }
                out<<aux+1<<'\n';
            }
            else
                out<<aux+1<<'\n';
        }
	}
	return 0;
}