用了二分,但是最后两个点没有过
查看原帖
用了二分,但是最后两个点没有过
504237
lk323232楼主2022/8/4 10:51

下载数据看了看,后面有几个点没打印出来,是太大了吗

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll m,a[2000001],flag;
inline ll er(ll l,ll r,ll x){
	while(l<r){
		ll mid=(r+l)/2;
		if(x<=a[mid]) r=mid;
		if(x>a[mid]) l=mid+1;
	}
	return l;
}
int main(){
	a[1]=1;
	cin>>m;
	for(int i=2;i<=m;++i){
		a[i]=a[i-1]+i;
		if(a[i]>m&&!flag) flag=i;
	}
	for(int i=flag;i<=m;++i){
		int x=a[i]-m;
		int q=er(1,i,x);
		if(a[i]-a[q]==m&&i!=q) cout<<q+1<<' '<<i<<endl;
	}	
	return 0;
}
2022/8/4 10:51
加载中...