Pagini recente » Statistici Enache Ioana Diana (EnacheDiana20) | Istoria paginii utilizator/bucur_radu | Profil Eusebiudistrugatorul | Monitorul de evaluare | Cod sursa (job #2006564)
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#define MAX 5000000
using namespace std;
struct Deque
{
int poz;
int elem;
};
Deque v[MAX];
int a[MAX];
int st, dr;
void push_back(int stuff, int ord, int n)
{
v[dr].elem = stuff;
v[dr].poz = ord;
dr = (dr + 1) % n;
}
void pop_back(int stuff, int ord, int n)
{
if(st != dr)
{
if(dr == 0)dr = n;
while(st != dr && stuff < v[dr - 1].elem)
{
dr--;
if(st != dr && dr == 0)dr = n;
}
}
push_back(stuff, ord, n);
}
void pop_front(int n)
{
st = (st + 1) % n;
}
int main()
{
FILE *fin, *fout;
int n, k, i;
long long int suma = 0;
fin = fopen("deque.in", "r");
fout = fopen("deque.out", "w");
fscanf(fin, "%d %d", &n, &k);
for(i = 0; i < n; i++)fscanf(fin, "%d", &a[i]);
for(i = 0; i < k; i++)pop_back(a[i], i, n);
suma = v[st].elem;
for(i = k; i < n; i++)
{
if(v[st].poz <= i - k)pop_front(n);
pop_back(a[i], i, n);
suma += v[st].elem;
}
fprintf(fout, "%lld", suma);
fclose( fin );
fclose( fout );
return 0;
}