求助,2.3tel,用的二分
  • 板块P1102 A-B 数对
  • 楼主b1acat
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/1/4 02:25
  • 上次更新2023/10/24 05:38:50
查看原帖
求助,2.3tel,用的二分
878821
b1acat楼主2023/1/4 02:25

思路就是累加每次找到的a-c成立的b个数,麻烦各位大佬帮忙看看

#include<bits/stdc++.h>
using namespace std;
unsigned long long n,m,c,a[200020];

unsigned long long part(unsigned long long start,unsigned long long end,unsigned long long int x){
	
	unsigned long long mid=start+(end-start)/2;
	if(end-start==1){
		if(x==a[start]) end=start;
			
		if(x==a[end]) start=end;
		
		if(end==start){
			while(a[end]==x) end++;
			return end-start;
		}
		
		else return 0;
	} 
	
	if(x<=a[mid]) part(start,mid,x);
	else part(mid,end,x);
	
}

int main(){
	cin >>n>>m;
	
	for(int i=0;i<n;i++) cin>>a[i];
	sort(a,a+n);
	for(int i=0;i<n;i++){
		c+=part(0,n,a[i]-m);
		//cout<<c;
	}
	cout <<c;
}
2023/1/4 02:25
加载中...