Cod sursa(job #2943924)

Utilizator tudordaian11Daian Tudor Marius tudordaian11 Data 21 noiembrie 2022 19:51:35
Problema Deque Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;

ifstream f( "deque.in" );
ofstream g( "deque.out" );


const int dim = 5*1e5 + 5;
int v[ dim ], coada[ dim ];

int main()
{
    int n, lung_fereastra, i, st = 1, dr = 0, S = 0;
    f >> n >> lung_fereastra;
    for( i = 1; i <= n; ++i )
        f >> v[ i ];

    for ( i = 1; i <= n; ++i )
        {
            while ( st <= dr   &&   v[ i ] <= v[ coada[dr] ] )
                --dr;

            coada[ ++dr ] = i;

            if( coada[ st ]  ==  i - lung_fereastra )
                ++st;

            /// DAca, chiar si dupa ce am eliminat capatul din st, pozitia elem e mai mare decat k, lungimea ferestrei, inseamna ca pot pune elementul in suma.
            /// Nu scot direct, mai pot fi si altele!
            if ( i  >=  lung_fereastra )
                S += v[ coada[st] ];
        }

    g << S;


    return 0;
}