Pagini recente » Cod sursa (job #768512) | Cod sursa (job #2866833) | Cod sursa (job #768419) | Cod sursa (job #1701007) | Cod sursa (job #3350431)
#include <fstream>
using namespace std;
ifstream in("deque.in");
ofstream out("deque.out");
int n, p;
int v[5000005];
int pref[5000005];
int suf[5000005];
int INF = (1 << 30);
int main()
{
in>>n>>p;
for(int i = 1; i<=n; i++)
{
in>>v[i];
}
int cnt_blk = (n + p - 1) / p;
for(int i = 0; i<=cnt_blk; i++)
{
int st = max(1, i * p);
int dr = min(n, (i + 1) * p - 1);
int cur = INF;
for(int j = st; j<=dr; j++)
{
cur = min(cur, v[j]);
pref[j] = cur;
}
cur = INF;
for(int j = dr; j>=st; j--)
{
cur = min(cur, v[j]);
suf[j] = cur;
}
}
long long ans = 0;
for(int i = 1; i<=n - p + 1; i++)
{
int blk = i / p;
if(i == blk * p)
{
ans += suf[i];
}
else
{
ans += min(suf[i], pref[i + p - 1]);
}
}
out<<ans;
return 0;
}