Pagini recente » Cod sursa (job #1795242) | Cod sursa (job #2239667) | Profil Sibethest | Cod sursa (job #2431201) | Cod sursa (job #1068496)
//
// main.cpp
// deque+
//
// Created by Catalina Brinza on 12/25/13.
// Copyright (c) 2013 Catalina Brinza. All rights reserved.
//
#include <fstream>
#include <vector>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
struct strut
{
int a,b;
};
int main()
{strut h[500001];
int s=0,nr=0;
strut q;
int n,k,i,x;
in>>n>>k;
for (i=1;i<=k;++i)
{
in>>x;
nr++;
q.a=x;
q.b=i;
h[nr]=q;
int fi=nr;
while (h[fi].a<h[fi/2].a && fi>1)
{
swap(h[fi],h[fi/2]);
fi=fi/2;
}
}
s=h[1].a;
for (i=k+1;i<=n;++i)
{
in>>x;
q.a=x;
q.b=i;
h[++nr]=q;
int fi=nr;
while (h[fi].a<h[fi/2].a && fi>1)
{
swap(h[fi],h[fi/2]);
fi=fi/2;
}
while (!(h[1].b>=i-k+1 && h[1].b<=i))
{
while (h[nr].b<i-k+1) nr--;
swap(h[1],h[nr]);
nr--;
int fi=1;
while (fi*2+1<=nr && (h[fi].a>h[fi*2].a || h[fi].a>h[fi*2+1].a))
{
if (h[fi*2+1].a<h[fi*2].a) {swap(h[fi],h[fi*2+1]); fi=fi*2+1;}
else { swap (h[fi*2],h[fi]);fi=fi*2;}
}
if (fi*2==nr && h[fi].a>h[fi*2].a) swap(h[fi*2],h[fi]);
}
s+=h[1].a;
}
out<<s;
in.close();
out.close();
return 0;
}