wtpavssite

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

二分

1.三足鼎立

来源:题目来源

错误的原因:

最开始想的就是通过二分来操作算出上下界,然后计算长度,可惜lower_bound和upper_bound不是很会用,就没做出来,然后自己手写的二分的模板已经忘得差不多了

代码:

点击查看代码
#include<bits/stdc++.h>
#define INF 2e5+1
#define ll long long
using namespace std;
void solve(){
	int n,k;
	cin>>n>>k;
	vector<int>a(n);
	for(int i=0;i<n;i++)cin>>a[i];
	sort(a.begin(),a.end());
	ll ans=0;
	for(int i=0;i+1<n;i++){
		int most=a[i]+k;
		int least;
		if(a[i]>=k){
			least=a[i]-k;
		}
		else{
			least=k-a[i];
		}
		ll l=upper_bound(a.begin()+1+i,a.end(),least)-a.begin();
		ll r=lower_bound(a.begin()+1+i,a.end(),most)-a.begin();
		ans+=max(0ll,r-l);
	}
	cout<<ans;
}
int main(){
	int t;
//	cin>>t;
	t=1;
	while(t--){
		solve();
	}
}
posted on 2026-04-01 20:46  wt_pav  阅读(2)  评论(0)    收藏  举报