Pagini recente » Cod sursa (job #2594263) | Cod sursa (job #2268132) | Cod sursa (job #1659913) | Cod sursa (job #672995) | Cod sursa (job #2071705)
#include <fstream>
#define NMAX 5000001
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
int n, k;
int v[NMAX], Deque[NMAX];
long long S = 0;
void deq() {
int st = 0, dr = -1;
for (int i = 0; i < n; i++) {
in >> v[i];
// Daca ala din stanga nu mai este valabil, iese.
if (st <= dr && Deque[st] == i - k) {
st++;
}
// Cat timp elementele din stanga nu sunt bune/potentiale, eliminam.
while (st <= dr && v[i] <= v[Deque[dr]]) {
dr--;
}
// Adaugam deque-ului elementul potential.
Deque[++dr] = i;
// Adaugam la suma cel mai bun element din deque - Deque[st].
if (i >= k - 1) {
S += v[Deque[st]];
//for (int j = st; j < dr + 1; j++) {
// out << Deque[j] << ' ';
//}
//out << '\n';
}
}
out << S;
}
int main()
{
in >> n >> k;
deq();
return 0;
}