用二分做的,为什么两个点TLE,一个点RE?
  • 板块P1102 A-B 数对
  • 楼主zcayyds
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/2/12 09:23
  • 上次更新2023/10/28 08:49:07
查看原帖
用二分做的,为什么两个点TLE,一个点RE?
169756
zcayyds楼主2022/2/12 09:23
#include<bits/stdc++.h>
using namespace std;
long long n,c,a[200100],mmax=INT_MIN,ans;
void dic(long long left,long long sum){
	long long right=n,record,left_move,right_move;
	while(left<=right){
		long long mid=(left+right)/2;
		//cout<<mid<<endl;
		if(a[mid]==sum){
			ans++;
			record=left_move=right_move=mid;
			break;
		}
		if(a[mid]>sum){
			right=mid-1;
		}
		if(a[mid]<sum){
			left=mid+1;
		}
		
	}
	while(a[--left_move]==sum&&(left_move>0))ans++;
	while(a[++right_move]==sum&&(right_move<=n))ans++;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>c;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		mmax=max(mmax,a[i]); 
	}
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++){
		if(a[i]+c<=mmax){
			dic(i,a[i]+c);
		}
		
	}
	cout<<ans<<endl;
	return 0;
}
2022/2/12 09:23
加载中...