Cod sursa(job #1753446)

Utilizator dtoniucDaniel Toniuc dtoniuc Data 6 septembrie 2016 16:03:01
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 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 *elem, deque<Elem*> &queue);

int main()
{
    ifstream fin;
    ofstream fout;
    fout.open("deque.out");
    fin.open("deque.in");

    int n, k, x;
    deque<Elem*> queue;

    fin >> n >> k;

    for(int i = 1; i <= k; i++)
    {
    	fin >> x;
    	Elem* newElem = new Elem(i, x);
    	InsertAtTheEnd(newElem, queue);
    }

    long long sum = queue.front()->val;
    for(int i = k + 1; i <= n; i++)
    {
    	fin >> x;

    	Elem* front = queue.front();
    	Elem* newElem = new Elem(i, x);

    	if(i - k >= front->pos)
    	{
    		queue.pop_front();
    	}

    	InsertAtTheEnd(newElem, queue);
    	sum += queue.front()->val;
    }

    fout << sum;

    fin.close();
    fout.close();
    return 0;
}

void InsertAtTheEnd(Elem *elem, deque<Elem*> &queue)
{
	while(!queue.empty() && queue.back()->val > elem->val)
	{
		queue.pop_back();
	}

	queue.push_back(elem);
}