Cod sursa(job #1442996)

Utilizator RanKBrinduse Alexandru RanK Data 26 mai 2015 17:23:28
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
typedef long long int int64;
 
#include <list>
 
struct NODE
{
    int value;
    int index;
};
 
using namespace std;
 
#define IN_FILE_NAME "deque.in"
#define OUT_FILE_NAME "deque.out"
 
int main()
{
    FILE *pFin, *pFout;
 
    pFin = fopen(IN_FILE_NAME, "r");
    pFout = fopen(OUT_FILE_NAME, "w");
 
    int n,k;
    fscanf(pFin, "%d %d", &n, &k);
 
    int *arr = new int[n];
 
    int i;
    for(i=0; i<n; i++)
    {
        int nr;
        fscanf(pFin, "%d", &nr);
        arr[i] = nr;
    }
     
    list<int> Q = list<int>();
    for(i=0; i<k; i++)
    {
        int nr = arr[i];
        while(!Q.empty() && arr[Q.back()] > nr)
        {
            Q.pop_back();
        }        
        Q.push_back(i);
    }
 
    int64 sum = 0;
    for(i=0; i<=n-k; i++)
    {
        int idx = Q.front();
        sum += arr[idx];
        if(idx <= i)
            Q.pop_front();
         
        if(i < n-k)
        {
            int nr = arr[i+k];
            while(!Q.empty() && arr[Q.back()] > nr)
            {
                Q.pop_back();
            }            
            Q.push_back(i+k);
        }
    }
    Q.clear();
    fprintf(pFout, "%lld\n", sum);
 
    fclose(pFin);
    fclose(pFout);
    return 0;
}