Cod sursa(job #1423240)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 21 aprilie 2015 16:50:15
Problema Deque Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
using namespace std;

template <typename T>
class deque{
	T* buf;
	int fr, bk, sz;
public:
	const int bufsz;
	deque(const int Bufsz):
		fr(0),
		bk(Bufsz-1),
		sz(0),
		bufsz(Bufsz){
		buf = new T[bufsz]; }
	~deque(){
		delete[] buf; }
	T& front(){
		return buf[fr]; }
	T& back(){
		return buf[bk]; }
	void push_back(const T val){
		++bk;
		if(bk == bufsz){
			bk = 0; }
		buf[bk] = val;
		++sz; }
	void push_front(const T val){
		--fr;
		if(fr == -1){
			fr = bufsz-1; }
		buf[fr] = val;
		++sz; }
	void pop_back(){
		--bk;
		if(bk == -1){
			bk = bufsz-1; }
		--sz; }
	void pop_front(){
		++fr;
		if(fr == bufsz){
			fr = 0; }
		--sz; }
	bool empty(){
		return sz == 0; } };

int main(){
	ifstream f("deque.in");
	int n, k, val;
	f >> n >> k;
	deque<int> dq(k), elemente(k);
	for(int i = 0; i < k; ++i){
		f >> val;
		while((!dq.empty()) && (dq.back() >= val)){
			dq.pop_back(); }
		dq.push_back(val);
		elemente.push_back(val); }
	int suma = dq.front();
	for(int i = k; i < n; ++i){
		if((!dq.empty()) && dq.front() == elemente.front()){
			dq.pop_front(); }
		elemente.pop_front();
		f >> val;
		elemente.push_back(val);

		while((!dq.empty()) && (dq.back() > val)){
			dq.pop_back(); }
		dq.push_back(val);

		suma += dq.front(); }
	
	ofstream g("deque.out");
	g << suma;
	return 0; }