Pagini recente » Cod sursa (job #2869347) | Cod sursa (job #2867437) | Cod sursa (job #2744563) | Cod sursa (job #1318900) | Cod sursa (job #2724712)
#include <bits/stdc++.h>
using namespace std;
ifstream fin( "deque.in" );
ofstream fout( "deque.out" );
class deq {
private:
struct nod {
int first, second;
nod *lf, *rg;
};
nod *fr, *bk;
int qsize;
public:
deq() {
fr = bk = NULL;
qsize = 0;
}
void pushfront( int a, int b ) {
nod *tmp = new nod;
tmp -> first = a;
tmp -> second = b;
tmp -> rg = fr;
tmp -> lf = NULL;
if( fr != NULL )
fr -> lf = tmp;
fr = tmp;
++qsize;
if( bk == NULL ) bk = fr;
}
void pushback( int a, int b ) {
nod *tmp = new nod;
tmp -> first = a;
tmp -> second = b;
tmp -> lf = bk;
tmp -> rg = NULL;
if( bk != NULL )
bk -> rg = tmp;
bk = tmp;
++qsize;
if( fr == NULL ) fr = bk;
}
void popfront() {
if( qsize == 0 ) return;
--qsize;
nod *tmp = fr;
fr = fr -> rg;
if( fr )
fr -> lf = NULL;
delete tmp;
if( qsize == 0 ) fr = bk = NULL;
}
void popback() {
if( qsize == 0 ) return;
--qsize;
nod *tmp = bk;
bk = bk -> lf;
if( bk )
bk -> rg = NULL;
delete tmp;
if( qsize == 0 ) fr = bk = NULL;
}
pair<int,int> qback() {
if( qsize == 0 ) return { -1, -1 };
return { bk -> first, bk -> second };
}
pair<int,int> qfront() {
if( qsize == 0 ) return { -1, -1 };
return { fr -> first, fr -> second };
}
int Qsize() {
return qsize;
}
};
deq Q;
int n, k;
long long sum;
int main()
{
fin >> n >> k;
int x;
for( int i = 1; i <= n; ++i ) {
fin >> x;
if( Q.Qsize() && i - Q.qfront().second == k )
Q.popfront();
while( Q.Qsize() && x < Q.qback().first )
Q.popback();
Q.pushback( x, i );
if( i >= k )
sum += Q.qfront().first;
}
fout << sum << '\n';
fin.close();
fout.close();
return 0;
}