Pagini recente » Cod sursa (job #411119) | Cod sursa (job #1567230) | Cod sursa (job #2102496) | Cod sursa (job #1242590) | Cod sursa (job #1049752)
#include<fstream>
#include<deque>
using namespace std;
/*
struct nod{
int inf,exp;
nod *legs,*legd;}*d,*s;
long long int i,n,x,val,k;
long long int suma;
void pop_left(nod* &s)
{
if(s==NULL) return;
nod *p=s;
if(s->legd)
{s=s->legd; s->legs=NULL;}
else s=NULL;
delete p;
}
void pop_right(nod* &d)
{
if(d==NULL) return;
nod *p=d;
if(d->legs)
{d=d->legs; d->legd=NULL;}
else d=NULL;
delete p;
}
void add_right(int x, nod* &d)
{
if(d==NULL){d=new nod; d->legs=d->legd=NULL; d->inf=x; s=d; return;}
nod* p=new nod;
p->inf=x;
p->legs=d;
d->legd=p;
p->legd=NULL;
d=p;
}
int main()
{
ifstream f("deque.in");
ofstream g("deque.out");
f>>n>>k;
s=new nod;
d=s=NULL;
for(i=1;i<=k;i++)
{
f>>val;
while(d!=NULL && d->inf>val)
pop_right(d);
add_right(val,d);
d->exp=i;
}
suma=s->inf;
for(i=k+1;i<=n;i++)
{
if(s->exp+k==i)
pop_left(s);
f>>val;
while(d!=NULL && d->inf>val)
pop_right(d);
add_right(val,d);
d->exp=i;
suma+=s->inf;
}
g<<suma;
f.close();
g.close();
return 0;
}
*/
deque <long long int> my_deq;
//deque <long long int> v
long long int i,n,k,suma;
long long int v[5000001];
int main()
{
ifstream f("deque.in");
ofstream g("deque.out");
f>>n>>k;
for(i=0;i<n;i++)
{
f>>v[i];
while(my_deq.empty()==0 && v[my_deq.back()]>v[i])
my_deq.pop_back();
my_deq.push_back(i);
if(my_deq.front()==i-k)
my_deq.pop_front();
if(i>=k-i)
suma+=v[my_deq.front()];
}
g<<suma;
f.close();
g.close();
return 0;
}