Pagini recente » Cod sursa (job #1396600) | Cod sursa (job #1942810) | Cod sursa (job #1169875) | Cod sursa (job #2795996) | Cod sursa (job #2722447)
#include <fstream>
//#include <iostream>
#define NQ 8388608
#define N 5000000
#define NMAX 10000000
using namespace std;
ifstream fin( "deque.in" );
ofstream fout( "deque.out" );
int dq[NQ + 1], v[N + 1];
int prim, ultim;
/*void afis( int a[], int st, int dr ) {
cout << "dq: ";
for ( int i = st; i < dr; i ++ )
cout << a[i] << " ";
cout << "\n";
}*/
int main() {
int n, k;
long long sum;
fin >> n >> k;
v[0] = -NMAX - 1;
prim = ultim = 0;
for ( int i = 1; i <= k; i ++ ) {
fin >> v[i];
while ( v[dq[( ultim + NQ - 1 ) % NQ]] >= v[i] ) {
ultim = ( ultim + NQ - 1 ) % NQ;
}
dq[ultim] = i;
ultim = ( ultim + 1 ) % NQ;
}
sum = v[dq[prim]];
//cout << v[dq[prim]] << "\n";
//afis( dq, prim, ultim );
for ( int i = k + 1; i <= n; i ++ ) {
fin >> v[i];
if ( dq[prim] <= i - k ) {
v[dq[prim]] = -NMAX - 1;
prim = ( prim + 1 ) % NQ;
}
while ( v[dq[( ultim + NQ - 1 ) % NQ]] >= v[i] ) {
ultim = ( ultim + NQ - 1 ) % NQ;
}
dq[ultim] = i;
ultim = ( ultim + 1 ) % NQ;
sum += v[dq[prim]];
//cout << v[dq[prim]] << " " << prim << " " << ultim << "\n";
//afis( dq, prim, ultim );
}
fout << sum << "\n";
return 0;
}