Cod sursa(job #2730312)

Utilizator pizzandreeaCiurescu Andreea pizzandreea Data 26 martie 2021 01:07:56
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 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--;                                      //scoatem elem mai mari ca elem curent
            
            Deq[++end] = i;             //adaugam poz elem curent la capatul deque

            if(Deq[start] == i-K)       //daca avem mai mult de k elemente
                start++;                //eliminam primul elemente de la inceputul deque

            if(i +1 >= K)                  //daca avem o secventa de k
                sum += A[Deq[start]];   //adaugam la suma primul element din deq (minimul)

        
        }

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


    return 0;
}