Cod sursa(job #764878)

Utilizator mi5humihai draghici mi5hu Data 6 iulie 2012 16:32:20
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>
#include <deque>
using namespace std;
int v[5000001];
deque< pair<int, int> > Q;
long long s;
int n, k;

void ins_back(int poz, int el) {
     while (Q.size() > 0 && Q.back().second >= el) {
           Q.pop_back();      
     }     
     pair<int, int> p; 
     p.first = poz;
     p.second = el;
     Q.push_back(p);
}

void del_front(int poz) {
     if (poz > Q.front().first) {
        Q.pop_front();        
     }     
}



void solve_() {
     for (int i = 0; i < k-1; i++) {
         ins_back(i, v[i]);
     }
     
     for (int j = k-1; j < n; j++) {
         ins_back(j, v[j]);
         del_front(j - k + 1);
         s += (long long)Q.front().second;
     } 
     printf("%lld", s);
}

void read_() {
     scanf("%d%d", &n, &k);
     for (int i = 0; i < n; i++) {
         scanf("%d", &v[i]);
     }     
}

int main() {
    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);
    
    read_();
    solve_();

    return 0;
}