Pagini recente » Statistici Toth Gratian-Stefan (gratian-stefan.toth) | Profil Pitiqu | Atasamentele paginii Profil bianca.tazlauanu | Cod sursa (job #3359399) | Cod sursa (job #1066998)
//
// main.cpp
// deque+
//
// Created by Catalina Brinza on 12/25/13.
// Copyright (c) 2013 Catalina Brinza. All rights reserved.
//
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
struct strut
{
int a,b;
};
int main()
{vector <strut> h;
int s=0;
strut q;
q.a=0;
q.b=0;
h.push_back(q);
int n,k,i,x;
in>>n>>k;
for (i=1;i<=n;++i)
{
in>>x;
q.a=x;
q.b=i;
h.push_back(q);
int fi=h.size()-1;
while (h[fi].a<h[fi/2].a && fi>1)
{
swap(h[fi],h[fi/2]);
fi=fi/2;
}
if (i>=k)
{
while (h[1].b<i-k+1)
{
h[1]=h[h.size()-1];
h.pop_back();
fi=1;
while (fi*2+1<h.size() && (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==n && 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;
}