Cod sursa(job #2729650)

Utilizator pizzandreeaCiurescu Andreea pizzandreea Data 25 martie 2021 01:30:56
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 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;
}