Pagini recente » Cod sursa (job #1653297) | Cod sursa (job #764251) | Cod sursa (job #85462) | Cod sursa (job #1217278) | Cod sursa (job #3211666)
#include <bits/stdc++.h>
using namespace std;
deque <int> deq;
ifstream fin("deque.in");
ofstream fout("deque.out");
const int Nmax = 5000005;
int n,i,j,k,a[Nmax];
long long sol;
//-7 9 2 4 -1 5 6 7 1
//-7 2
//Deque-ul va fi ordonat crescator, deci solutia este mereu
//primul element din deq
int main()
{
fin>>n>>k;
for(i=1; i<=n; i++)
{
fin>>a[i];
//elimin elem outdated
if(!deq.empty() && deq.front() == i-k) //daca a mai ramas un element outdated la inceput, elimin
deq.pop_front();
//elimin elm din front mai mari(pastram crescator)
while(!deq.empty() && a[deq.back()] > a[i])
{
deq.pop_back();
}
//inserez elementul
deq.push_back(i); //pun pozitia ptc pot avea Duplicate!!
for(auto it = deq.begin();it!=deq.end();it++)
cout<<a[*it]<<' ';
cout<<'\n';
//solutia este mereu primul elem din deq
if(i>=k ) //trb sa am k elemente in subsir
{
sol += a[deq.front()];
// cout<<deq.front()<<'\n';
}
}
fout<<sol;
return 0;
}