#include<bits/stdc++.h>头文件下的lower_bound和upper_bound用法

lower_bound和upper_bound函数和我们通常理解的概念不一样,lower_bound返回的是第一个大于等于k的数,upper_bound返回的是第一个大于k的数,因此做题的时候在选择函数方面需要稍加斟酌
函数用法 lower_bound(a,a+数组元素个数,k)-a 返回的值为第一个大于等于k的数的数组索引

它的参数就是:
1.一个数组元素的地址(或者数组名来表示这个数组的首地址,用来表示这个数组的开头比较的元素的地址,不一定要是首地址,只是用于比较的“首”地址),
2.一个数组元素的地址(对应的这个数组里边任意一个元素的地址,表示这个二分里边的比较的"结尾’地址),
3.就是一个你要二分查找的那个数。

返回值就是返回第一次出现大于等于那个要查找的数的地址

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	int a[100000],b[100000],c[100000];
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	for(int i=0;i<n;i++){
		cin>>b[i];
	}
	for(int i=0;i<n;i++){
		cin>>c[i];
	}
	int sum1=0,sum2=0,sum=0;
	for(int i=0;i<n;i++){
		cout<<"比b["<<i<<"]"<<"小的有"<<lower_bound(a,a+n,b[i])-a-1+1<<"个"<<endl;
		sum1=lower_bound(a,a+n,b[i])-a-1+1;
		cout<<"比b["<<i<<"]"<<"大的有"<<n-(upper_bound(c,c+n,b[i])-c)<<"个"<<endl; 
		sum2=n-(upper_bound(c,c+n,b[i])-c)+1-1;
		sum+=sum1*sum2;
	}
	cout<<sum;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值