Cod sursa(job #3032024)

Utilizator Chris_BlackBlaga Cristian Chris_Black Data 21 martie 2023 12:25:34
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <deque>
using namespace std;
ifstream cin("deque.in");
ofstream cout("deque.out");
const int N = 5 * 1e6 + 9;
int n,k,v[N];

class dqueue
{
private:
    deque<pair<int,int>> dq;
public:
    void push(int val,int ind)
    {
        while(!dq.empty() && dq.back().first >= val)
            dq.pop_back();
        dq.push_back({val,ind});
    }
    int query(int ind)
    {
        while(!dq.empty() && dq.front().second < ind)
            dq.pop_front();
        if(dq.size() == 0)
            return -1;
        return dq.front().first;
    }
};

int main()
{
    dqueue dq;

    cin>>n>>k;
    for(int i = 1; i <= n; ++i)
        cin>>v[i];

    for(int i = 1; i < k; ++i)
        dq.push(v[i],i);

    long long ans = 0;
    for(int i = k; i <= n; ++i)
    {
        dq.push(v[i],i);
        ans += dq.query(i - k + 1);
    }

    cout<<ans;
    return 0;
}