Cod sursa(job #2155461)

Utilizator Justice88Tirisi Claudiu Justice88 Data 7 martie 2018 20:58:43
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream o("cautbin.out");
int N, A[100001], M, K, L;
void citire(){
f>>N;
for(int i=0;i<N;i++){
f>>A[i];
}
f>>M;
}
int solve0(int x){
int ls=0, ld=N, n;
while(ls<ld){
n=(ls+ld)/2;
if(A[n]==x){
while(n<N && A[n]==x){
n++;
}
o<<n<<" ";
return 0;
} else {
if(x<A[n]){
ld=n-1;
} else {
ls=n+1;
}
}
}
o<<-1<<" ";
}
int solve1(int x){
int ls=0, ld=N, n;
while(ls<ld){
n=(ls+ld)/2;
if(A[n]==x){
if(A[n+1]==x){
while(n<N && A[n]==x){
n++;
}
o<<n--<<" ";
break;
} else {
o<<n-1;
break;
}
} else {
if(x<A[n]){
ld=n-1;
} else {
ls=n+1;
}
}
}
}
int solve2(int x){
int ls=0, ld=N, n;
while(ls<ld){
n=(ls+ld)/2;
if(A[n]==x){
if(A[n-1]==x){
while(n>=0 && A[n]==x){
n--;
}
o<<n--<<" ";
break;
} else {
o<<n+1;
break;
}
} else {
if(x<A[n]){
ld=n-1;
} else {
ls=n+1;
}
}
}
}
void rezolvare(){
for(int i=0;i<M;i++){
f>>K>>L;
if(K==0){
solve0(L);
} else {
if(K==1){
solve1(L);
} else {
solve2(L);
}
}
}
}
int main(){
citire();
rezolvare();
}