Pagini recente » Cod sursa (job #2673503) | Cod sursa (job #3004480) | Cod sursa (job #1945428) | Cod sursa (job #163673) | Cod sursa (job #1753926)
#include<iostream>
#include<math.h>
using namespace std;
int n,m,a[100001];
int greatest(int x){
int st=0,dr=n-1,mij,poz=-1;
while(st<=dr){
mij=(st+dr)>>1;
if(x==a[mij]){
poz=mij;st=mij+1;
}else if(x<a[mij]){
dr=mij-1;
}else st=mij+1;;
}
return poz;
}
int lowerThanX(int x){
int st=0,dr=n-1,mij,poz=-1;
while(st<=dr){
mij=(st+dr)>>1;
if(x==a[mij]){
return greatest(x);
}else if(x<a[mij]){
dr=mij-1;
}else{
st=mij+1;
poz=mij;
}
}
return poz;
}
int greaterThanX(int x){
int st=0,dr=n-1,mij,poz=-1;
while(st<=dr){
mij=(st+dr)>>1;
if(x==a[mij]){
poz=mij;dr=mij-1;
}else if(x<a[mij]){
poz=mij,dr=mij-1;
}else st=mij+1;;
}
return poz;
}
int main(){
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
int x,y;
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
cin>>m;
for(int i=0;i<m;i++){
cin>>x>>y;
switch(x){
case 0:cout<<greatest(y)+1<<endl;break;
case 1:cout<<lowerThanX(y)+1<<endl;break;
case 2:cout<<greaterThanX(y)+1<<endl;
}
}
}