Pagini recente » Cod sursa (job #1773086) | Cod sursa (job #2627318) | Cod sursa (job #782842) | Cod sursa (job #333657) | Cod sursa (job #2044369)
#include <fstream>
#include <cstdio>
#define nmax 5000005
using namespace std;
fstream f1("deque.in", ios::in);
fstream f2("deque.out", ios::out);
int n, k, a[nmax], prim, ultim, cand[nmax];
long long suma=0;
///cand -retine cand pentru minim pt secv curenta [i-k+1, i]
int main()
{
int i;
f1>>n>>k;
for(i=1; i<=n; i++) f1>>a[i];
prim=1; ultim=0;
for(i=1; i<=n; i++)
{
while((prim<=ultim)&&(a[cand[ultim]]>= a[i])) ultim--; ///elimini el ce sigur nu mai sunt= min
ultim++;
cand[ultim]=i; ///adaugi un nou cand
if(cand[prim]== i-k) prim++; ///elimini primul el daca iesi din secv
if((prim<=ultim)&&(i>=k)) suma+=a[cand[prim]]; ///daca ai min k el in secv iei min
}
f2<<suma<<"\n";
return 0;
}