Pagini recente » Cod sursa (job #2298190) | Cod sursa (job #2953950) | Cod sursa (job #1951221) | Monitorul de evaluare | Cod sursa (job #2379397)
#include <deque>
#include <cstdio>
#include <vector>
#define ll long long int
#define min(a,b) (a<b ? a : b)
using namespace std;
void rezolvare()
{
ll suma = 0;
FILE *fin = fopen("deque.in", "r");
FILE *fout = fopen("deque.out", "w");
int n,k,minim,tmp;
fscanf(fin, "%d %d", &n, &k);
deque<int> deck;
vector<int> vec;
for (int i=0;i<n;i++)
{
fscanf(fin, "%d", &tmp);
vec.push_back(tmp);
while (deck.size()>0 && vec[deck.back()]>=vec[i])
{
deck.pop_back();
}
deck.push_back(i);
while (deck.size()>0 && deck.front()<=i-k)
{
deck.pop_front();
}
if (i>=k-1)
{
suma += vec[deck.front()];
}
}
fprintf(fout, "%lld", suma);
}
int main()
{
rezolvare();
return 0;
}