Pagini recente » Cod sursa (job #619081) | Cod sursa (job #679316) | Cod sursa (job #3245932) | Cod sursa (job #2367016) | Cod sursa (job #2475323)
#include <fstream>
#define N 5000001
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int main()
{
long long i,n,k;
fin>>n>>k;
long long a[N],s=0;
for(i=1;i<=n;i++)
fin>>a[i];
int fronti=1,backi=0,C[N]; //coada vida
//in coada vom memora pozitiile
for(i=1;i<=n;i++)
{
//cat timp elementul curent este mai mic fata de elementele din coada, le vom scoate din coada
while(fronti<=backi && a[i]<=a[C[backi]])backi--;
//adaugam pozitia elementului curent in coada
C[++backi]=i;
//daca primul element nu mai face parte din nicio grupa
if(C[fronti] == i-k)fronti++;
//adaugam minimul la suma
if(i>=k)s+=a[C[fronti]];
}
fout<<s;
return 0;
}