RE求助,算法是前缀+二分
查看原帖
RE求助,算法是前缀+二分
638272
thehanged楼主2024/2/28 22:46

本地测试没有问题,一提交就re了,说我访问了非法的内存,但我似乎没有看到越界的地方。求大佬看看

#include <iostream>
#include <algorithm>
using namespace std;

const int N = 2e6 + 5;
using ll = long long;
ll ps[N];
int n;

int search(int l, int r, ll a){
    if(l > r) return -1;
    int mid = l + r >> 1;
    if(ps[mid] - a == n) return mid;
    else if(ps[mid]- a > n) search(l, mid - 1, a);
    else if(ps[mid]- a < n) search(mid + 1, r, a);
}

int main(){
	cin >> n;
	for(int i = 1; i <= n; ++i) ps[i] = ps[i - 1] + i;
	
	for(int i = 1; i <= n; ++i){
		// 二分枚举j 
		int j = search(i + 1, n + 1, ps[i - 1]);
		if(j == -1) continue; 
		cout << i << " " << j << endl;
	}
    return 0;
}
2024/2/28 22:46
加载中...