Cod sursa(job #2718157)

Utilizator TrainingArcAndrei Slav TrainingArc Data 8 martie 2021 15:37:42
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <vector>

std::vector<int>v;

int cb1(int x, int st = 0, int dr = v.size()-1) {
	int ans = -1;
	while(st<=dr) {
		int mij = (st+dr)>>1;
		if(v[mij]==x) ans = mij+1, st = mij+1;
		if(v[mij]<x) st = mij+1;
		if(v[mij]>x) dr = mij-1;
	}
	return ans;
}

int cb2(int x, int st = 0, int dr = v.size()-1) {
	int ans = -1;
	while(st<=dr) {
		int mij = (st+dr)>>1;
		if(v[mij]<=x) ans = mij+1, st = mij+1;
		if(v[mij]>x) dr = mij-1;
	}
	return ans;
}

int cb3(int x, int st = 0, int dr = v.size()-1) {
	int ans = -1;
	while(st<=dr) {
		int mij = (st+dr)>>1;
		if(v[mij]<x) st = mij+1;
		if(v[mij]>=x) ans = mij+1, dr = mij-1;
	}
	return ans;
}

int main() {
	std::ifstream fin("cautbin.in");
	std::ofstream fout("cautbin.out");
	int n, k, op, x;
	fin>>n;
	v.resize(n);
	for(int i=0;i<n;i++) fin>>v[i];
	fin>>k;
	while(k--) {
		fin>>op>>x;
		if(op==0) fout<<cb1(x)<<"\n";
		if(op==1) fout<<cb2(x)<<"\n";
		if(op==2) fout<<cb3(x)<<"\n";
	}
}