洛谷P1147连续自然数和


采用前缀和思想,用二分查找寻找区间,时间复杂度O(n+nlogn)

#include<bits/stdc++.h>
#define maxn 2000000
using namespace std;
long long arr[maxn+1];
long long brr[maxn+1];
int main()
{
	brr[0]=0;
	for(int i=1;i<=maxn;i++)
	{
		arr[i]=i;
		brr[i]=brr[i-1]+arr[i];
	}
	int m;cin>>m;
	for(int i=1;i<=maxn;i++)
	{
		int pos=lower_bound(brr+1,brr+maxn+1,brr[i]+m)-brr;
		if(brr[pos]-brr[i]==m&&pos!=i+1)cout<<i+1<<" "<<pos<<endl;
	}
	return 0;
}
作者:xmsi
出处:http://www.cnblogs.com/tldr/
本文版权归作者和博客园共有,欢迎转载,但转载时请保留此段声明。
原文地址:https://www.cnblogs.com/tldr/p/10891884.html