Cod sursa(job #3326170)

Utilizator SkibidiCezarCezar Bolba SkibidiCezar Data 27 noiembrie 2025 16:40:50
Problema Deque Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>
#define int long long

using namespace std;
ifstream fin ("deque.in");
ofstream fout ("deque.out");
int n, k, sum, st, dr;
struct el{
    int v, s, d;
};
el a[5000005];
stack <int> sky;

signed main()
{
    fin >> n >> k;
    for(int i = 1; i <= n; i++){
        fin >> a[i].v;
        while(!sky.empty() && a[i].v < a[sky.top()].v){
            a[sky.top()].d = i;
            sky.pop();
        }
        sky.push(i);
    }
    while(!sky.empty()){ sky.pop(); }
    for(int i = n; i >= 1; i--){
        if(a[i].d == 0) a[i].d = n + 1;
        while(!sky.empty() && a[i].v < a[sky.top()].v){
            a[sky.top()].s = i;
            sky.pop();
        }
        sky.push(i);
    }
    for(int i = 1; i <= n; i++){
        //cout << a[i].s << " " << a[i].d << "\n";
        st = max(a[i].s + 1, i - k + 1);
        dr = min(a[i].d - k, i);
        if(st <= dr){
            sum += a[i].v * (dr - st + 1);
        }
    }
    fout << sum;
    return 0;
}