Pagini recente » Cod sursa (job #841838) | Cod sursa (job #1781315) | Cod sursa (job #56261) | Cod sursa (job #1100912) | Cod sursa (job #253056)
Cod sursa(job #253056)
#include <cstdio>
#include <deque>
#define FIN "deque.in"
#define FOUT "deque.out"
#define N 5000000
using namespace std;
int n,k;
long long s;
int v[N];
deque <int> d;
void read()
{
int i;
deque <int> :: iterator it;
freopen(FIN,"r",stdin);
scanf("%d%d", &n, &k);
scanf("%d", &v[1]);
d.push_back(1);
for (i = 2; i <= n; ++i)
{
scanf("%d", &v[i]);
if (v[i] > v[ d.back() ])
{
d.push_back(i);
//printf("am adaugat la sfarsit %d\n",v[i]);
}
if (i - d.front() >= k)
{
//printf("am scos %d - prea vechi\n",v[d.front()]);
d.pop_front();
}
if (v[i] < v[ d.back() ])
{
while ( v[i] < v[ d.back() ] && d.size() )
{
//printf("am scos %d - prea mare\n",v[d.back()]);
d.pop_back();
}
d.push_back(i);
//printf("adaug la sfarsit %d\n",v[i]);
}
if(i>=k)
s += v[ d.front() ];
}
}
void write()
{
freopen(FOUT,"w",stdout);
printf("%lld \n", s);
}
int main()
{
read();
//solve();
write();
}