社区讨论
60分求调,莫名TLE前两个点
P1923【深基9.例4】求第 k 小的数参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mlqoa3gj
- 此快照首次捕获于
- 2026/02/17 22:02 3 周前
- 此快照最后确认于
- 2026/02/22 09:00 2 周前
CPP
#include <cstdio>
#include <algorithm>
#include <random>
using namespace std;
namespace pnl {
#define reg register
typedef long long LL;
constexpr LL N = 6000100;
LL l = 1, r, k;
mt19937 eng(random_device{}());
int a[N], b[N];
int main() {
scanf("%lld%lld", &r, &k);
++k;
for (reg int i = l; i <= r; ++i) {
scanf("%d", &a[i]);
}
while (l < r) {
b[l - 1] = l - 1;
b[r + 1] = r + 1;
LL mid = a[eng() % (r - l + 1) + l];
for (reg int i = l; i <= r; ++i) {
if (a[i] < mid)
b[++b[l - 1]] = a[i];
else
b[--b[r + 1]] = a[i];
}
if (b[l - 1] >= k) {
r = b[l - 1];
} else {
l = b[r + 1];
}
for (reg int i = l; i <= r; ++i) a[i] = b[i];
}
printf("%d\n", a[l]);
return 0;
}
}
int main() {
// Audaces fortuna iuvat
pnl::main();
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...