Cod sursa(job #1753754)

Utilizator dtoniucDaniel Toniuc dtoniuc Data 7 septembrie 2016 09:36:55
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#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++;
	}
}