Pagini recente » Cod sursa (job #1828375) | Cod sursa (job #1054928) | Cod sursa (job #671646) | Cod sursa (job #2706795) | Cod sursa (job #2080235)
#include <fstream>
//#include <iostream>
#define MaxN 5000005
using namespace std;
struct elem
{
int ert;
int sorsz;
};
elem dq[MaxN];
int N, K, minm, x, dq_e = 1, dq_v = 0, i=0, j=0;
long long sum = 0;
/*void cout_deque()
{
cout<<"deque: ";
for (int k = dq_e;k <= dq_v;k++)
cout<<dq[k].ert<<' ';
cout<<'\n';
}*/
int main()
{
ifstream f("deque.in");
f>>N>>K;
while (i<K)
{
f>>x;
if (dq_e > dq_v)
{
dq[++dq_v] = {x, i};
}
else if (x > dq[dq_v].ert)
{
dq[++dq_v] = {x, i};
}
else
{
while (x <= dq[dq_v].ert && dq_v>=dq_e)
--dq_v;
dq[++dq_v] = {x, i};
}
++i;
}
minm = dq[dq_e].ert;
sum += minm;
++j;
while (i<N)
{
f>>x;
if (dq_e > dq_v)
{
dq[++dq_v] = {x, i};
}
else if (x > dq[dq_v].ert)
{
dq[++dq_v] = {x, i};
}
else
{
while (x <= dq[dq_v].ert && dq_v>=dq_e)
--dq_v;
dq[++dq_v] = {x, i};
}
if (dq[dq_e].sorsz < j)
++dq_e;
minm = dq[dq_e].ert;
//cout_deque();
sum += minm;
++i;
++j;
}
ofstream g("deque.out");
g<<sum;
}