Pagini recente » Cod sursa (job #1175888) | Cod sursa (job #2805544) | Cod sursa (job #2512944) | Cod sursa (job #2344362) | Cod sursa (job #1072868)
#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(){
}