Cod sursa(job #2730576)

Utilizator alina225Avram Miruna alina225 Data 26 martie 2021 16:07:24
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>

using namespace std;

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


int   A[5000001],Deq[5000001];

bool isempty(int v[5000001], int start, int end)
{
    return start > end;
}

int main()
{
    int N, K;
    int minim;          //retine minimul din secventa de k curenta
    int start, end;
    int x;
    long long sum = 0;

    start = 0;
    end = -1;

    fin>>N>>K;


    for(int i = 0; i < N; i++)
        fin>>A[i];


    for(int i = 0 ; i < N; i++)
    {
        while (start <= end && A[i] <= A[Deq[end]])    //cat timp deque nu e gol si elem curent este mai mic decat A[deq.end]
            end--;

        Deq[++end] = i;             //adaugam poz elem curent la capatul deque

        if(Deq[start] == i-K)       //daca primul element din Deque corespunde cu poz primului element din secventa curenta de K elem
            start++;                //pop_front

        if(i +1 >= K)                  //daca nu suntem in prima secventa de K
            sum += A[Deq[start]];   //adaugam la suma primul element din deq


    }

    fout<<sum;
    fin.close();
    fout.close();


    return 0;
}