Cod sursa(job #1174618)
Utilizator | Hasmasan Dragos hasmasandragos | Data | 23 aprilie 2014 16:37:20 |
---|---|---|---|
Problema | Deque | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.64 kb |
#include <fstream>
#include <deque>
using namespace std;
deque<int> deck;
int vec[5000005],n,k,i;
long long int suma;
ifstream f("deque.in");
ofstream g("deque.out");
int main()
{f>>n>>k;
for (i=1;i<=n;i++)
f>>vec[i];
for (i=1;i<=n;i++)
{ while(!deck.empty())
if(deck.front()+k-1<i)
deck.pop_front();
else
break;
while(!deck.empty())
if (vec[deck.back()]>=vec[i])
deck.pop_back();
else
break;
deck.push_back(i);
if (i>=k)
suma+=vec[deck.front()];
}
g<<suma<<'\n';
f.close();
g.close();
return 0;
}