#include<bits/stdc++.h>
using namespace std;
int n,a[1001],k;
int b_search1(int l,int r,int k){
while(l<r){
int m=l+r+1>>1;
//检查是否满足橙色性质
if(a[m]<=k) l=m;
else r=m-1;
}
//循环结束l和r同时指向边界
return l;
}
int b_search2(int l,int r,int k){
while(l<r){
int m=l+r>>1;
//检查是否满足绿色性质
if(a[m]>=k) r=m;
else l=m+1;
}
//循环结束l和r同时指向边界
return l;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
//二分使用的前提,排序
sort(a+1,a+n+1);
//1、找满足左侧性质的最大值(橙色区域右边界)
//小于等于k的最大值
cin>>k;
cout<<b_search1(1,n,k);//返回 小于等于k的最大值 的下标
//2、找满足右侧性质的最小值(绿色区域左边界)
//大于等于k的最小值
cout<<endl<<b_search2(1,n,k);
int x1=lower_bound(a+1,a+n+1,3)-a;//返回绿色区域的左边界,<=3的最小下标
int x2=upper_bound(a+1,a+n+1,3)-a;//返回橙色区域的右边界,>=3的最大下标
cout<<x1<<" "<<x2;
return 0;
}
04-24
1万+
07-24
300