Pagini recente » Cod sursa (job #737158) | Cod sursa (job #94609) | Cod sursa (job #1643377) | Cod sursa (job #229162) | Cod sursa (job #1753935)
#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=-2;
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=-2;
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=-2;
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;
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%d %d",&x,&y);
switch(x){
case 0:printf("%d\n",greatest(y)+1);break;
case 1:printf("%d\n",lowerThanX(y)+1);break;
case 2:printf("%d\n",greaterThanX(y)+1);
}
}
}