0%

第十一届中国大学生程序设计竞赛网络预选赛(CCPC Online 2025)——造桥与砍树

思路讲解

https://chatgpt.com/share/68cf5c55-f5c8-8013-b94f-360aabb163b8

这道题目就是懒更新,一般来说,塞进懒更新库的是比较乐观的估计,或者说是比较好的估计。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
priority_queue<Val> pq;
multiset<ll> s{A[0]}, rem(A.begin() + 1, A.end());
ll ans = 0;
auto add = [&](ll x) {
auto it = rem.lower_bound(K-x);
if (it == rem.end())
return;
pq.push({x, x + *it - K});
};
auto find = [&](ll x) {
auto it = rem.lower_bound(K - x);
if (it == rem.end())
return INF;
return *it;
};
auto get = [&]() {
while (!pq.empty()) {
auto [val, res] = pq.top();
ll node = find(val);
ll lres = node + val - K;
if (lres == res) {
return (pll){res, node};
} else {
pq.pop();
pq.push({val, lres});
}
}
return (pll){INF, INF};
};
add(A[0]);
FOR(i, 2, N) {
ll lans = *s.begin() + *rem.begin();
auto [res, node] = get();
if (res < lans) {
lans = res;
s.insert(node);
rem.erase(rem.find(node));
add(node);
} else {
ll node=*rem.begin();
s.insert(node);
rem.erase(rem.begin());
add(node);
}
ans += lans;
}

AC代码

https://qoj.ac/submission/1381898

心路历程(WA,TLE,MLE……)