Cod sursa(job #1072868)

Utilizator IeewIordache Bogdan Ieew Data 5 ianuarie 2014 02:08:54
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <fstream>

using namespace std;

#define DEBUG false
#define MAXN 5000001

#if DEBUG
#include <iostream>
#define INFILE "/Users/biordach/Documents/Xcode Projects/training/training/deque.in"
#define __OUT cout
#else
#define INFILE "deque.in"
#define OUTFILE "deque.out"
ofstream __OUT(OUTFILE);
#endif

void readInput();
void solve();
void printOutput();

struct node{
    int value, position;
}a[MAXN];

int pointer = -1;
int frontPointer = 0;

int main(int argc, const char * argv[])
{
    readInput();
//  solve();
//  printOutput();

#if DEBUG == false
    __OUT.close();
#endif
    
    return 0;
}

void deleteList(){
    pointer = -1;
    frontPointer = 0;
}

void addToList(int x, int pos){
    
    if(pointer >= 0 && a[frontPointer].value >= x){
        deleteList();
    }
    
    if(pointer == -1){
        pointer = 0;
        a[0].value = x;
        a[0].position = pos;
        return;
    }
    
    while(a[pointer].value >= x){
        pointer--;
    }
    pointer++;
    a[pointer].value = x;
    a[pointer].position = pos;
}

void readInput(){
    int n, k;
    long long sum = 0;
    ifstream in(INFILE);
    in>>n>>k;
    int x;
    for(int i=0;i<k;i++){
        in>>x;
        addToList(x, i);
    }
    
    sum += a[0].value;
    
    for(int i=k; i < n; i++){
        in>>x;
        addToList(x, i);
        if(i - a[frontPointer].position == k){
            frontPointer++;
        }
        sum += a[frontPointer].value;
    }
    
    
    in.close();
    __OUT<<sum<<'\n';
}

void solve(){
}

void printOutput(){
}