二分92pts求调玄关
  • 板块P1102 A-B 数对
  • 楼主acbdsyj
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/8 21:15
  • 上次更新2024/11/9 00:52:52
查看原帖
二分92pts求调玄关
562463
acbdsyj楼主2024/11/8 21:15
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int a[N],n,c;
bool check(int k,int t)
{
	if(a[k]<t)return true;
	return false;
}
bool check2(int k,int t)
{
	if(a[k]==t)return true;
	return false;
}
int find(int t)
{
	int l=1,r=n;
	while(l<r)
	{
		int mid=(l+r)>>1;
		if(check(mid,t))l=mid+1;
		else r=mid;
	}
	if(l==n&&!check2(l,t))return 0;
	return l;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>c;int cnt=0;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++)
	{
		int x=find(a[i]+c);
		int y=x;
		for(;y<=n;y++)if(a[y]!=a[i]+c)break;
		if(y!=0)y--;
		if(x==0&&y==0)continue;
		cnt+=(y-x+1);
	}
	cout<<cnt;
	return 0;
} 

怎么二分求右端点?
2024/11/8 21:15
加载中...