diff --git a/Luogu/P1484/P1484.cpp b/Luogu/P1484/P1484.cpp new file mode 100644 index 00000000..9a9afe06 --- /dev/null +++ b/Luogu/P1484/P1484.cpp @@ -0,0 +1,50 @@ +#include +#include +#include + +using std::cin; +using std::cout; +const char endl = '\n'; + +const int N = 5e5 + 5; + +int n, k, a[N << 1], l[N << 1], r[N << 1]; +long long ans; +std::priority_queue> q; +bool vis[N << 1]; + +int main() { + std::ios::sync_with_stdio(false); + cin.tie(nullptr); + + cin >> n >> k; + + for (int i = 1; i <= n; i++) { + cin >> a[i]; + + q.emplace(a[i], i); + l[i] = i - 1; + r[i] = i + 1; + } + + for (int i = 1, cnt = n; i <= k; i++) { + while (!q.empty() && vis[q.top().second]) q.pop(); + + if (q.empty() || q.top().first < 0) break; + + int id = q.top().second; + ans += q.top().first; + q.pop(); + + vis[id] = vis[l[id]] = vis[r[id]] = true; + a[++cnt] = a[l[id]] + a[r[id]] - a[id]; + l[cnt] = l[l[id]], r[cnt] = r[r[id]]; + r[l[cnt]] = cnt, l[r[cnt]] = cnt; + + q.emplace(a[cnt], cnt); + } + + cout << ans << endl; + + return 0; +}