Cod sursa(job #1783995)

Utilizator horatiucheval2Horatiu Andrei Cheval horatiucheval2 Data 19 octombrie 2016 17:45:06
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>

const int MAX = 5000000;
int arr[MAX], deq[MAX];

void print(int arr[], int first, int last){
    for(int i = first; i < last; ++i){
        std::cout << arr[i] << " ";
    }
    std::cout << "\n";
}

int main(){
    std::ifstream fin("deque.in");
    std::ofstream fout("deque.out");

    int n, k;
    long long sum = 0;
    int first = 0, last = 0;
    fin >> n >> k;

    for(int i = 0; i < k; ++i){
        fin >> arr[i];

        while(last - first > 0 && arr[deq[last - 1]] >= arr[i]){
            last--;
        }
        last++;
        deq[last - 1] = i;
    }

    for(int i = k; i < n; ++i){
        fin >> arr[i];

        sum += arr[deq[first]];

        if(i - deq[first] >= k){
            first++;
        }

        while(last - first > 0 && arr[deq[last - 1]] >= arr[i]){
            last--;
        }
        last++;
        deq[last - 1] = i;
    }
    sum += arr[deq[first]];

    fout << sum;

    fin.close();
    fout.close();
    return 0;
}