Pagini recente » Cod sursa (job #1183914) | Cod sursa (job #362376) | Cod sursa (job #1688063) | Cod sursa (job #1921131) | Cod sursa (job #1753754)
#include <fstream>
#include <deque>
using namespace std;
typedef struct elem
{
int pos;
int val;
public:
elem(int pos, int val) : pos(pos), val(val) {};
}Elem;
void InsertAtTheEnd(Elem* x, Elem** &front, Elem** &back);
int main()
{
ifstream fin;
ofstream fout;
fout.open("deque.out");
fin.open("deque.in");
int n, k, x;
Elem **deque = new Elem*[n + 2]();
Elem **front = deque, **back = deque;
fin >> n >> k;
for(int i = 1; i <= k; i++)
{
fin >> x;
InsertAtTheEnd(new Elem(i, x), front, back);
}
long long sum = (*front)->val;
for(int i = k + 1; i <= n; i++)
{
fin >> x;
if(i - k >= (*front)->pos)
{
front++;
}
InsertAtTheEnd(new Elem(i, x), front, back);
sum += (*front)->val;
}
fout << sum;
fin.close();
fout.close();
return 0;
}
void InsertAtTheEnd(Elem* x, Elem** &front, Elem** &back)
{
if(back == front && (*back) == NULL)
*(back++) = x;
else
{
back--;
while(back >= front && (*back)->val > x->val)
{
back--;
}
*(++back) = x;
back++;
}
}