Cod sursa(job #3297391)

Utilizator Arhiva_Educationala_2Arhiva Educationala doi Arhiva_Educationala_2 Data 22 mai 2025 16:10:26
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <stdio.h>

#include <deque>
#include <queue>
#include <algorithm>

struct Mata {
  std::deque<int> mata;
  std::queue<int> tactu;
  void push( int x ) {
    tactu.push( x );
    while( !mata.empty() && mata.back() > x )
      mata.pop_back();
    mata.push_back( x );
  }

  void pop() {
    int x = tactu.front();
    tactu.pop();
    if( mata.front() == x )
      mata.pop_front();
  }

  int getmin() const { return mata.front(); }
};

int main() {
  FILE *fin = fopen( "deque.in", "r" );
  FILE *fout = fopen( "deque.out", "w" );

  int n, k;
  fscanf( fin, "%d%d", &n, &k );
  Mata zile;
  for( int i = 0; i < k - 1; i++ ){
    int x;
    fscanf( fin, "%d", &x );
    zile.push( x );
  }

  long long ret = 0;
  for( int i = k - 1; i < n; i++ ){
    int x;
    fscanf( fin, "%d", &x );
    zile.push( x );
    ret += zile.getmin();
    zile.pop();
  }
  
  fprintf( fout, "%lld\n", ret );

  fclose( fin );
  fclose( fout );
  return 0;
}