Pagini recente » Cod sursa (job #2230731) | Cod sursa (job #1758714) | Cod sursa (job #1125825) | Cod sursa (job #2326940) | Cod sursa (job #2202574)
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream o("cautbin.out");
int A[100001], m, n, q, w;
void solve1(int x){
int hi=n-1, low=0, done=0, mid=low+(hi-low)/2, p=-1;
while(hi>low && !done){
mid=low+(hi-low)/2;
if(A[mid]==x){
while(A[mid]==x){
mid++;
}
p=mid;
done=1;
} else {
if(A[mid]<x){
low=mid+1;
} else {
hi=mid-1;
}
}
}
o<<p<<"\n";
}
void solve2(int x){
int hi=n-1, low=0, done=0, mid=low+(hi-low)/2, p=-1;
while(hi>low && !done){
mid=low+(hi-low)/2;
if(A[mid]==x){
if(A[mid+1]==x){
low=mid;
} else {
p=mid;
done=1;
}
} else {
if(A[mid<x]){
if(A[mid+1]>x){
p=mid;
done=1;
} else {
low=mid+1;
}
} else {
hi=mid;
}
}
}
o<<p+1<<"\n";
}
void solve3(int x){
int hi=n-1, low=0, done=0, mid=low+(hi-low)/2, p=-1;
while(hi>low && !done){
mid=low+(hi-low)/2;
if(A[mid]==x){
if(A[mid-1]==x){
hi=mid;
} else {
p=mid;
done=1;
}
} else {
if(A[mid]>x){
if(A[mid-1]<x){
p=mid;
done=1;
} else {
low=mid+1;
}
} else {
hi=mid;
}
}
}
o<<p+1<<"\n";
}
void solve(int a, int x){
switch(a){
case 0:solve1(x);break;
case 1:solve2(x);break;
case 2:solve3(x);break;
}
}
void citire(){
f>>n;
for(int i=0;i<n;i++){
f>>A[i];
}
f>>m;
for(int i=0;i<m;i++){
f>>q>>w;
solve(q, w);
}
}
int main(){
citire();
return 0;
}