社区讨论

有一个测试点tle了,求大佬帮忙调

P1102A-B 数对参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@m5xr02rk
此快照首次捕获于
2025/01/15 18:17
去年
此快照最后确认于
2025/01/15 21:38
去年
查看原帖
CPP
#include<iostream>
#include<algorithm>
#include<climits>
#include<string>
#include<vector>
#include<cstring>
using namespace std;
int arr1[200100], arr2[200100], cnt = 0;
int solve(int m, int l, int r) {
	while (l <= r) {
		if (arr2[(l + r) / 2] > m) return solve(m, l, (l + r) / 2 - 1);
		else if (arr2[(l + r) / 2] < m) return solve(m, (l + r) / 2 + 1, r);
		else {
			int i = 0, j = 0;
			while (arr2[(l + r) / 2 - i] == m)i++;
			while (arr2[(l + r) / 2 + j] == m)j++;
			return i + j - 1;
		}
	}
	return 0;
}
int main() {
	int n, c;
	cin >> n >> c;
	for (int i = 0; i < n; i++) {
		cin >> arr1[i];
	}
	sort(arr1, arr1 + n);
	for (int i = 0; i < n; i++) {
		arr2[i] = arr1[i] + c;
	}
	for (int i = 0; i < n; i++) {
		cnt+=solve(arr1[i], 0, n);
	}
	cout << cnt;
	return 0;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...