Pagini recente » Cod sursa (job #3345065) | Cod sursa (job #3303499) | Monitorul de evaluare | Cod sursa (job #3310212) | Cod sursa (job #3326170)
#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;
}