Cod sursa(job #542984)
Utilizator | Data | 27 februarie 2011 12:55:32 | |
---|---|---|---|
Problema | Deque | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.51 kb |
#include<fstream>
#include<deque>
using namespace std;
#define maxn 5000001
ifstream f("deque.in");
ofstream g("deque.out");
int n,k,i;
int h,t; //head & tail
int A[maxn], Deck[maxn];
long long ss;
int main()
{ f>>n>>k;
for (i = 1; i <= n; i++)
f>>A[i];
h=1;
t=0;
ss=0;
for (i=1;i<=n;++i){
while (h<=t&&A[i]<=A[Deck[t]])
t--;
Deck[++t]=i;
if (Deck[h]==i-k)
++h;
if (i>=k)
ss+=A[Deck[h]];
}
g<<ss<<'\n';
return 0;
}