Cod sursa(job #1881274)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 16 februarie 2017 12:26:21
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("deque.in");
ofstream g("deque.out");
char pbuf[(int)1e5], *pp = pbuf, *pep = pp + sizeof(pbuf);

void adv(){
    if(++pp == pep) f.read(pp=pbuf, sizeof(pbuf)); }

int _get(){
    int rez = 0;
    while(*pp < '0' && *pp != '-') adv();
    bool neg = (*pp == '-');
    if(neg) adv();
    while(*pp >= '0') rez = 10 * rez + *pp - '0', adv();

    return neg ? -rez : rez; }

constexpr int maxn = 5e6 + 10;

int dq[maxn], *st = dq, *dr = dq, v[maxn] = {};

int main(){
    f.read(pbuf, sizeof(pbuf));
    const int n = _get(), k = _get();
    generate(v, v+n, &_get);

    long long rez = 0;
    for(int i = -k, j = 0; j < n; ++i, ++j){
        while(st < dr && dr[-1] > v[j]) --dr;
        *dr++ = v[j];
        if(i >= 0 && *st == v[i]) ++st;
        if(i >= -1) rez += *st; }
    g << rez << endl;
    return 0; }