Cod sursa(job #2713099)

Utilizator dr_personalityEftime Andrei Horatiu dr_personality Data 27 februarie 2021 11:24:10
Problema Deque Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.66 kb
#include <fstream>
#include<vector>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");

int n, k;
vector <int> v;

/*double exp(double x)
{
    double sum = 0, act = x, k = 3.667;
    for(double i = 1; i<=6; i++)
    {
        sum += (i - k) * act;
        act *= x;
    }

    return sum;
}

double bs()
{
    double lo = 0.0, hi = 5.0, mid;
    while(hi - lo>0.001)
    {
        mid = (hi + lo) / 2;

        if(exp(mid)<0.001 && exp(mid)>0.001)
            return mid;

        if(exp(mid)>0)
            hi = mid;
        else
            lo = mid;
    }

    return mid;
}

int main()
{
    //cout<<bs()<<'\n';

    int rasp = 0;
    for(int i = 100; i<1000; i++)
    {
        if(i%21==0)
        {
            if(i%10!=i/100)
                rasp++;
            else
                cout<<i<<'\n';
        }
    }
    cout<<rasp<<'\n';

    return 0;
}*/

int maxMinInSegments(vector<int> arr, int m) {
    vector<int> deq;
    int deq_st = 0;//position at which deque starts
    long long sum = 0;
    for(int i = 0; i<(int)arr.size(); i++)
    {
        while((int)deq.size()>deq_st && arr[deq[deq.size() - 1]]>=arr[i])
        {
            deq.pop_back();
        }

        deq.push_back(i);

        if(i - deq[deq_st]>=m)
        {
            deq_st++;
        }

        if(i>=m - 1)
        {
            sum += (long long)arr[deq[deq_st]];
        }
    }

    return sum;
}


int main(){
    in>>n>>k;
    for(int i = 0; i<n; i++)
    {
        int x;
        in>>x;
        v.push_back(x);
    }

    out<<maxMinInSegments(v, k)<<'\n';
    return 0;
}