社区讨论
有一个测试点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 条回复,欢迎继续交流。
正在加载回复...