Pagini recente » Cod sursa (job #1132993) | Cod sursa (job #556849) | Cod sursa (job #2401622) | Cod sursa (job #1336837) | Cod sursa (job #1553501)
#include<iostream>
#include<fstream>
#define nmax 5000009
using namespace std;
ifstream fin ("deque.in");
ofstream fout ("deque.out");
struct coord{
int val, poz;
};
int st, dr, k, n;
coord coada[nmax];
long long int suma;
int main ()
{
int i, j, x;
fin >> n >> k >> x;
st = dr = 1;
coada[st].val = x;
coada[st].poz = 1;
for (i=2; i<=k; i++)
{
fin >> x;
if (coada[st].poz < i-k+1) st++;
if (st == dr+1) /// coada vida
{
dr++;
coada[dr].poz = i;
coada[dr].val = x;
}
else
{
while (st<=dr && x < coada[dr].val)
dr--;
if (st > dr)
{
dr = st;
coada[dr].poz = i;
coada[dr].val = x;
}
else
{
dr++;
coada[dr].poz = i;
coada[dr].val = x;
}
}
}
suma += coada[st].val;
for (i=k+1; i<=n; i++)
{
fin >> x;
if (coada[st].poz < i-k+1) st++;
if (st == dr+1) /// coada vida
{
dr++;
coada[dr].poz = i;
coada[dr].val = x;
}
else
{
while (st<=dr && x < coada[dr].val)
dr--;
if (st > dr)
{
dr = st;
coada[dr].poz = i;
coada[dr].val = x;
}
else
{
dr++;
coada[dr].poz = i;
coada[dr].val = x;
}
}
suma += coada[st].val;
}
fout << suma << "\n";
fin.close();
fout.close();
return 0;
}