Pagini recente » Cod sursa (job #2796168) | Cod sursa (job #2933281) | Cod sursa (job #2751900) | Cod sursa (job #2122024) | Cod sursa (job #2155471)
#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;
}
void solve0(int x){
int ls=0, ld=N, n;
while(ls<ld){
n=(int)(ls+ld)/2;
if(A[n]==x){
while(n<N && A[n]==x){
n++;
}
o<<n<<" ";
return;
} else {
if(x<A[n]){
ld=n-1;
} else {
ls=n+1;
}
}
}
o<<-1<<" ";
}
void solve1(int x){
int ls=0, ld=N, n;
while(ls<ld){
n=(int)(ls+ld)/2;
if(A[n]==x){
if(A[n+1]==x){
while(n<N && A[n]==x){
n++;
}
o<<n--<<" ";
return;
} else {
o<<n-1;
return;
}
} else {
if(x<A[n]){
ld=n-1;
} else {
ls=n+1;
}
}
}
}
void solve2(int x){
int ls=0, ld=N, n;
while(ls<ld){
n=(int)(ls+ld)/2;
if(A[n]==x){
if(A[n-1]==x){
while(n>=0 && A[n]==x){
n--;
}
o<<n+2<<" ";
return;
} else {
o<<n+1;
return;
}
} 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();
}