Cod sursa(job #2813523)

Utilizator Stefan_XTRadu Stefan Rares Stefan_XT Data 6 decembrie 2021 21:04:34
Problema Deque Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
using namespace std;
#define ll long long

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

deque<int> dq;
int n, k, curr_min = INT_MAX;
ll sum_final;

void recalculateMin(int x){
     int len = dq.size();

     curr_min = INT_MAX;
     for (int i = 0; i < len; i++)
          curr_min = min(dq[i], curr_min);
}

int main(){
     f >> n >> k;
     for (int i = 1, x; i <= n; i++){
          f >> x;
          if (dq.size() < k){
               dq.push_back(x);
               curr_min = min(x, curr_min);
          }
          else{
               sum_final += curr_min;

               int ex_first = dq.front();
               dq.push_back(x);
               dq.pop_front();

               if (ex_first != curr_min){
                    //O(1)
                    curr_min = min(x, curr_min);
               }
               else{
                    //O(k)
                    recalculateMin(x);
               }
          }
     }

     sum_final += curr_min;
     g << sum_final;
     return 0;
}