Cod sursa(job #597854)
Utilizator | Data | 23 iunie 2011 15:40:59 | |
---|---|---|---|
Problema | Deque | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.65 kb |
#include <iostream>
#include <fstream>
#include <deque>
using namespace std;
deque <int> D;
int N, K, X[5000005];
long long S;
ifstream fin ("deque.in");
ofstream fout ("deque.out");
int main()
{
int i;
fin >> N >> K;
for (i=1; i<=N; ++i)
{
fin >> X[i];
while (!D.empty () && X[D.back ()]>=X[i])
{
D.pop_back ();
}
D.push_back (i);
if (D.front ()<=i-K)
{
D.pop_front ();
}
if (i>=K)
{
S+=X[D.front ()];
}
}
fout << S << "\n";
fin.close ();
fout.close ();
return 0;
}