Cod sursa(job #2784872)

Utilizator PopoiuAndraPopoiu Andra-Stefania PopoiuAndra Data 17 octombrie 2021 16:44:39
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>
#define N 5000005
using namespace std;

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

int n,k;
long long 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;
}