Pagini recente » Cod sursa (job #1302589) | Cod sursa (job #105045) | Cod sursa (job #2070136) | Cod sursa (job #672664) | Cod sursa (job #2784869)
#include <bits/stdc++.h>
#define N 5000005
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int n,k,sum;
int s[N],poz[N];
int main()
{
int i,x,pr,ul;
fin>>n>>k;
fin>>s[1];
poz[1]=1;
pr=ul=1;
for(i=2;i<=k; ++i)
{
fin>>x;
if(x<=s[ul] && ul>=pr)
{
s[ul]=x; poz[ul]=i;
while(x<s[ul-1] && ul-1>=pr)
{ s[--ul]=x; poz[ul]=i; }
}
else s[++ul]=x,poz[ul]=i;
}
sum+=s[1];
for(i=k+1; i<=n; ++i)
{
fin>>x;
if( poz[pr] < i-k+1 ) pr++; /// verificam daca primul
///element din stiva se afla in submultimea curenta de lg k
if(x<s[ul] && ul>=pr)
{
s[ul]=x; poz[ul]=i;
while(x<=s[ul-1] && ul-1>=pr)
{ s[--ul]=x; poz[ul]=i; }
}
else s[++ul]=x,poz[ul]=i;
sum+=s[pr];
}
fout<<sum;
return 0;
}