Pagini recente » Istoria paginii runda/tomberonulverde/clasament | Cod sursa (job #340212) | Cod sursa (job #2822274) | Cod sursa (job #1155496) | Cod sursa (job #2675282)
#include <bits/stdc++.h>
using namespace std;
deque < pair < long long, long long > > dq; /// valoare si timp
long long oldTime=1, n, k, V[5000005],s;
void fast ()
{
ios_base::sync_with_stdio(false);
cin.tie();
}
void add (pair <long long, long long> x)
{
while (!dq.empty() && dq.back().first> x.first)
dq.pop_back();
dq.push_back(x);
}
void _remove ()
{
if (dq.front().second==oldTime)
dq.pop_front();
oldTime++;
}
int getMin () /// minimul din dq
{
return dq.front().first;
}
int main()
{
fast();
freopen("deque.in","r", stdin);
freopen("deque.out","w", stdout);
scanf("%lld %lld", &n, &k);
for (int i=1; i<=n; i++)
scanf("%lld", &V[i]);
for (int i=1; i<=k; i++)
add({V[i],i});
s+=getMin();
for (int i=k+1; i<=n; i++)
{
_remove();
add({V[i],i});
s+=getMin();
}
printf("%lld", s);
return 0;
}