Pagini recente » Cod sursa (job #1501100) | Cod sursa (job #1267456) | Cod sursa (job #757157) | Cod sursa (job #920174) | Cod sursa (job #2728671)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int N, K, f, b, v[5000001], deq[5000001]; //declaram global ca sa mearga :))
long long suma;
int main()
{
fin>>N>>K;
for(int i=1;i<=N;i++)
fin>>v[i];
b=0;
f=1;
for(int i=1;i<=N;i++)
{
while(f <= b && v[i] <= v[deq[b]]) //scadem pozitia ultimului element din deque cat timp este elementul v[i] < ultimul din deque
b--;
deq[++b] = i; //adaugam poz elementului v[i] in deque
if(deq[f] == i-K) //daca min = elementul de pe i-K ,il scoatem din deque
f++;
if(i >= K) suma+= v[deq[f]]; //minimul se va afla in varful deque ului
}
fout<<suma;
return 0;
}