Cod sursa(job #3350431)

Utilizator unomMirel Costel unom Data 7 aprilie 2026 20:31:45
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>

using namespace std;

ifstream in("deque.in");
ofstream out("deque.out");
int n, p;
int v[5000005];
int pref[5000005];
int suf[5000005];
int INF = (1 << 30);

int main()
{
    in>>n>>p;
    for(int i = 1; i<=n; i++)
    {
        in>>v[i];
    }

    int cnt_blk = (n + p - 1) / p;
    for(int i = 0; i<=cnt_blk; i++)
    {
        int st = max(1, i * p);
        int dr = min(n, (i + 1) * p - 1);

        int cur = INF;
        for(int j = st; j<=dr; j++)
        {
            cur = min(cur, v[j]);
            pref[j] = cur;
        }

        cur = INF;
        for(int j = dr; j>=st; j--)
        {
            cur = min(cur, v[j]);
            suf[j] = cur;
        }
    }

    long long ans = 0;
    for(int i = 1; i<=n - p + 1; i++)
    {
        int blk = i / p;
        if(i == blk * p)
        {
            ans += suf[i];
        }
        else
        {
            ans += min(suf[i], pref[i + p - 1]);
        }
    }

    out<<ans;

    return 0;
}