Cod sursa(job #3137666)

Utilizator verde.cristian2005Verde Flaviu-Cristian verde.cristian2005 Data 14 iunie 2023 10:59:36
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
using namespace std;

#ifndef HOME
    ifstream in("deque.in");
    ofstream out("deque.out");
    #define cin in
    #define cout out
#endif // HOME

int v[5000001];

int steve[5000001], vf;

int st[5000001];

int main()
{
#ifdef HOME
    freopen("test.in", "r", stdin);
    freopen("test.out", "w", stdout);
#endif
    int n, k;
    long long rasp = 0;
    cin >> n >> k;
    for(int i = 1; i <= n; i++)
        cin >> v[i];
    vf = 0;
    steve[vf] = 0;
    for(int i = 1; i <= n; i++)
    {
        while(vf != 0 && v[i] <= v[steve[vf]])///h[i] > h[steve[vf]]
            vf--;
        st[i] = steve[vf];
        steve[++vf] = i;
    }
    vf = 0;
    steve[vf] = n + 1;
    for(int i = n; i >= 1; i--)
    {
        while(vf != 0 && v[i] < v[steve[vf]])///h[i] > h[steve[vf]]
            vf--;
        ///am st[i] si steve[vf]
        int first, last;
        first = max(i, st[i] + k);
        last = min(i + k - 1, steve[vf] - 1);
        if(last >= first)
            rasp += 1LL * v[i] * (last - first + 1);
        steve[++vf] = i;
    }
    cout << rasp;
    return 0;
}