結果
| 問題 |
No.738 平らな農地
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-12-01 12:02:23 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,322 bytes |
| コンパイル時間 | 3,342 ms |
| コンパイル使用メモリ | 256,736 KB |
| 実行使用メモリ | 5,484 KB |
| 最終ジャッジ日時 | 2024-12-01 12:02:33 |
| 合計ジャッジ時間 | 9,166 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 83 WA * 4 |
ソースコード
#ifndef LOCAL
#include <bits/stdc++.h>
using namespace std;
#define debug(...) (void(0))
#else
#include "algo/debug.h"
#endif
template <class T>
struct FenwickTree {
private:
int n;
int pw;
std::vector<T> dat;
public:
FenwickTree(int m = 0) { init(m); }
void init(int m) {
n = m;
pw = std::bit_floor((unsigned int)n);
dat.assign(n, T{});
}
void add(int p, const T& x) {
assert(0 <= p && p < n);
for (p += 1; p <= n; p += p & -p) {
dat[p - 1] += x;
}
}
T sum(int l, int r) const {
assert(0 <= l && l <= r && r <= n);
return sum(r) - sum(l);
}
int select(T x) const {
int at = 0;
for (int len = pw; len > 0; len >>= 1) {
if (at + len <= n && dat[at + len - 1] <= x) {
at += len;
x -= dat[at - 1];
}
}
assert(0 <= at && at <= n);
return at;
}
private:
T sum(int r) const {
T ans{};
for (; r > 0; r -= r & -r) {
ans += dat[r - 1];
}
return ans;
}
};
void solve() {
int N, K;
cin >> N >> K;
vector<int> A(N);
for (int i = 0; i < N; i++) cin >> A[i];
vector<int> cc;
for (const auto& x : A) cc.push_back(x);
sort(cc.begin(), cc.end());
cc.erase(unique(cc.begin(), cc.end()), cc.end());
FenwickTree<int> st(N);
FenwickTree<int64_t> fw(N);
const auto Add = [&](int p, int x, int64_t a) {
int y = distance(cc.begin(), lower_bound(cc.begin(), cc.end(), p));
st.add(y, x);
fw.add(y, a);
};
int64_t ans = 1e18;
int64_t sum = 0;
for (int i = 0; i < N; i++) {
if (i < K - 1) {
Add(A[i], 1, A[i]);
sum += A[i];
} else {
Add(A[i], 1, A[i]);
sum += A[i];
int id = st.select(K / 2);
int64_t res = (2 * st.sum(0, id) - K) * cc[id] + sum - 2 * fw.sum(0, id);
ans = min(ans, res);
Add(A[i - K + 1], -1, -A[i - K + 1]);
sum -= A[i - K + 1];
}
}
cout << ans << endl;
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int tt = 1;
// std::cin >> tt;
while (tt--) {
solve();
}
}