Pagini recente » Cod sursa (job #1107372) | Cod sursa (job #2692017) | Cod sursa (job #2141217) | Cod sursa (job #1360796) | Cod sursa (job #846371)
Cod sursa(job #846371)
#include<fstream>
#include<algorithm>
using namespace std;
#define val first
#define poz second
ifstream f("deque.in");
ofstream g("deque.out");
const int Nmax = 5000001;
int N, K, M, nr;
pair<int, int> Heap[Nmax];
long long rez;
void Heap_Up(int k) {
while(k>1 && Heap[k/2].val > Heap[k].val) {
swap(Heap[k], Heap[k/2]);
k/=2;
}
}
void insert(pair<int, int> elem) {
Heap[++M] = elem;
Heap_Up(M);
}
void Heap_Down(int k) {
int son = k;
if(2*k <= M && Heap[2*k].val < Heap[son].val)
son = 2*k;
if(2*k+1 <= M && Heap[2*k+1].val < Heap[son].val)
son = 2*k+1;
if(son!=k) {
swap(Heap[k], Heap[son]);
Heap_Down(son);
}
}
void erase(int k) {
Heap[k] = Heap[M];
--M;
Heap_Down(k);
}
int main() {
int i;
pair<int, int> elem;
f>>N>>K;
for(i=1; i<=N; ++i) {
f>>nr;
elem.val = nr;
elem.poz = i;
insert(elem);
while(M && Heap[1].poz <= i-K)
erase(1);
if(i>=K)
rez+=Heap[1].val;
}
g<<rez<<"\n";
f.close(); g.close();
return 0;
}