Pagini recente » Cod sursa (job #430936) | Cod sursa (job #2794835) | Cod sursa (job #339117) | Cod sursa (job #169321) | Cod sursa (job #1881274)
#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; }