Pagini recente » Cod sursa (job #329532) | Cod sursa (job #2716991) | Cod sursa (job #753508) | Cod sursa (job #1477205) | Cod sursa (job #1257728)
//dq.push_front(val)
//dq.push_back(val)
//dq.back()
//dq.front()
//ultimele 2 returneaza primul element din dq sau ultimul
#include <cstdio>
#include <deque>
#define DMAX 5000010
using namespace std;
void citire();
void afisare();
void rez();
deque <int> dq;
int n, k, a[DMAX];
long long int sum;
int main()
{
citire();
rez();
afisare();
return 0;
}
void citire()
{
FILE*fin=fopen ("deque.in", "r");
fscanf(fin, "%d %d", &n, &k);
int i;
for (i=1; i<=n; ++i)
fscanf(fin, "%d", &a[i]);
fclose(fin);
return;
}
void rez()
{
int i;//in dq avem pozitiile din vector
for (i=1; i<=n; ++i)
{
if (!dq.empty() && dq.front()==i-k)//am trecut cu stanga secventei de pozitia dq.front()
dq.pop_front();
while (!dq.empty() && a[dq.back()]>=a[i])
dq.pop_back();
dq.push_back (i);
if (i>=k) sum+=a[dq.front()];
}
return;
}
void afisare()
{
FILE*fout=fopen ("deque.out", "w");
fprintf(fout, "%lld\n", sum);
fclose(fout);
return;
}