Cod sursa(job #1417067)

Utilizator ArkinyStoica Alex Arkiny Data 9 aprilie 2015 15:14:52
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>
#include<iostream>
using namespace std;

#define MAX 5000001

ifstream in("deque.in");
ofstream out("deque.out");

struct el
{
	int v,p;
}v[MAX];


int N,K,st=1,f=0,ef,size=0;
void push_top(el e)
{
	v[++f].v=e.v;
	v[f].p=e.p;
	++size;
}
void pop_top()
{
	if(size>0)
	{
		--f;
		--size;
	}
}
void pop_front()
{
	if(size>0)
	{
		++st;
		--size;
	}
}
el get_top()
{
	return v[f];
}
el get_front()
{
	return v[st];
}
int main()
{
	in>>N>>K;
	int t=0,p=0;
	long long s=0;
    for(int i=1;i<=N-K + 1 ;i++)
	{
		if(size>0 && i>get_front().p)
			pop_front();
		while(t<K)
		{
			in>>ef;
			el e;
			++p;
			if(size==0)
			{
			  e.p=p;
			  e.v=ef;
			}
			else
				while(size>0 && ef<=get_top().v)
			  {
				    pop_top();
			  }
			  e.p=p;
			  e.v=ef;
              push_top(e);
			  ++t;
		  }
		  s=s+get_front().v;
		  --t;
	}
	out<<s;
	return 0;
}