Pagini recente » Cod sursa (job #2933147) | Cod sursa (job #1520583) | Cod sursa (job #2893603) | Istoria paginii runda/arhiva-vianu/clasament | Cod sursa (job #2155461)
#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();
}