Pagini recente » Cod sursa (job #1625766) | Cod sursa (job #152539) | Cod sursa (job #1477251) | Cod sursa (job #3167518) | Cod sursa (job #2623849)
#include <iostream>
#include<fstream>
#include<queue>
using namespace std;
ifstream f ("deque.in");
ofstream g ("deque.out");
deque <pair<int,int>> minime;
long long n,k,x,suma=0;
int main()
{
f>>n>>k;
for(int i=1; i<=n; i++)
{
f>>x;
///Daca dupa un element urmeaza sa adaugam un element mai mic decat el
///il scoatem din coada, pentru ca acesta nu va mai putea fi minim
///pe o secventa
while(!(minime.empty()) and x <= minime.back().second)
minime.pop_back();
minime.push_back({i,x});
if(i-k == minime.front().first)
minime.pop_front();
///Primul element (front) din coada este mereu minimul
///Daca secventa a trecut de elementul respectiv se schimba minimul
if(i>= k)
suma += minime.front().second;
}
g<<suma;
return 0;
}