Cod sursa(job #1064760)
Utilizator | Mihai X NCode | Data | 22 decembrie 2013 12:45:39 |
---|---|---|---|
Problema | Deque | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.75 kb |
#include <fstream>
#define maxn 5000008
using namespace std;
int sir[maxn], deck[maxn];
long long suma;
int main()
{
ifstream in("deque.in ");
ofstream out("deque.out");
int n,k;
in>>n>>k;
for (int i = 1; i <= n; i++) in>>sir[i];
int head=1;
int tail=0;
for (int i = 1; i <= n; i++)
{
while ( head <= tail && sir[i] <= sir[ deck[tail] ] )
tail--;
deck[++tail] = i;
if (deck[head] == i-k)
head++;
if (i >= k)
suma += sir[ deck[head] ];
}
out<<suma<<"\n";
in.close();
out.close();
return 0;
}