Pagini recente » Cod sursa (job #746228) | Rating Catuna Croitor Paul (paulici875) | Cod sursa (job #185495) | Cod sursa (job #1120173) | Cod sursa (job #2761650)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int f,b,n, k, a[5000001], dq[5000001],i; // dque retine poz min
long long s=0;
int main() // de la f la b vor fi mereu k elem (odata ce am parcurs suf elem)
{ // f este locul in care ne aflam cu cautarea si b ar trebui sa fie lung reala actuala a lui dq
fin>>n>>k;// numerele si lung secv
for (i = 1; i <= n; i++)
fin>>a[i]; //memoram nr in a
f = 1; b = 0; // front si back
for (i = 1; i <= n; i++)
{
while (f <= b && a[i] <= a[dq[b]]) //f<=b inseamna dq nu e empty, si elem curr este <= cu ultimul
//elem adugat in dq
b--; // ca a scos din spate
dq[++b] = i; // baga in spate poz i
// fout<<i<<" ";
if (dq[f] == i-k) // cand scot din fata f++, aceasi chestie cu i-k ca la vila cand am trecut peste k
f++;
if (i >= k) // am parcurs suf
s += a[dq[f]]; // bag in suma minimul direct
// fout<<f<<" ";
}
// fout <<endl;
// for (int i=1;i<=n;i++)
// {
// fout<<dq[i]<<" ";
// }
// fout<<endl;
fout<<s;
// -7 dq:
// 9
// 2
// 4
// -1
// 5
// 6
// 7
// 1
return 0;
}