CSES Sliding Cost
// compile: make data
// run: ./data < data.in
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#ifdef LOCAL
#include <debug/codeforces.h>
#define debug(x...) _debug_print(#x, x);
#define Debug(x...) _debug_print_format(#x, x);
std::ifstream terminal("/dev/tty");
#define PP cerr<<"\033[1;30mpause...\e[0m",terminal.ignore();
#else
#define debug(x...)
#define Debug(x...)
#define PP
#endif
template<typename...Args> void print_(Args...args){((cout<<args<<" "),...)<<endl;}
#define rep(i,a,b) for(int i=(a);i<(int)(b);++i)
#define sz(v) ((int)(v).size())
#define print(...) print_(__VA_ARGS__);
#define FIND(a, x) ((find(a.begin(),a.end(),(x))!=a.end())?1:0)
#define cmin(x,...) x=min({(x),__VA_ARGS__})
#define cmax(x,...) x=max({(x),__VA_ARGS__})
#define INTMAX (int)(9223372036854775807)
#define INF (int)(1152921504606846976)
#define NaN (int)(0x8b88e1d0595d51d1)
#define double long double
#define int long long
#define uint unsigned long long
#define MAXN 200010

int32_t main() {
    ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);

    int n, k; cin >> n >> k;
    vector<int> a(n);
    rep(i, 0, n) cin >> a[i];
    multiset<int> L, R;
    int sumL = 0, sumR = 0;

    auto get = [&]() -> int {
        int res = -sumL + sumR;
        int add = INF;
        if (sz(L)) cmin(add, *L.rbegin() * (2*sz(L) - k));
        if (sz(R)) cmin(add, *R.begin() * (2*sz(L) - k));
        return res + add;
    };
    rep(i, 0, k) L.insert(a[i]), sumL += a[i];
    int basic = get();
    rep(i, 0, k) {
        auto it = L.end(); --it;
        int num = *it;
        L.erase(it), sumL -= num;
        R.insert(num), sumR += num;
        int res = get();
        if (res > basic) {
            L.insert(num), sumL += num;
            R.erase(R.find(num)), sumR -= num;
            break;
        }
        else basic = res;
    }
    cout << basic;
    auto adjust = [&]() -> int {
        int res = get();
        if (sz(L)) {
            auto it = L.end(); --it;
            int num = *it;
            L.erase(it), sumL -= num;
            R.insert(num), sumR += num;
            int newres = get();
            if (newres < res) return newres;
            else {
                L.insert(num), sumL += num;
                R.erase(R.find(num)), sumR -= num;
            }
        }
        if (sz(R)) {
            auto it = R.begin();
            int num = *it;
            R.erase(it), sumR -= num;
            L.insert(num), sumL += num;
            int newres = get();
            if (newres < res) return newres;
            else {
                R.insert(num), sumR += num;
                L.erase(L.find(num)), sumL -= num;
            }
        }
        return res;
    };
    rep(i, k, n) {
        if (L.find(a[i-k]) != L.end()) L.erase(L.find(a[i-k])), sumL -= a[i-k];
        else R.erase(R.find(a[i-k])), sumR -= a[i-k];
        if (sz(R) && a[i] >= *R.begin()) R.insert(a[i]), sumR += a[i];
        else L.insert(a[i]), sumL += a[i];
        int res = adjust();
        cout << ' ' << res;
    }
    cout << endl;

    return 0;
}

Comments

  1. 1 month ago
    2026-9-22 12:02:54

    [2581]Penulis4d: Login, Daftar Akun dan Slot Gacor Deposit Dana,Penulis4d menyediakan akses login dan daftar akun mudah. Nikmati slot gacor deposit dana serta download apk casino android untuk main lebih praktis. Yuk join! visit: penulis4d

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous
Next