Pagini recente » Cod sursa (job #3336368) | Cod sursa (job #3336306) | Cod sursa (job #3320692) | Borderou de evaluare (job #1549326) | Cod sursa (job #3312844)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
long long v[5000001];
long long d[5000001]; //v[d[p]] <v[d[p+1]] <....<v[d[u]]
int main()
{ int n;
int k;
fin>>n>>k;
for(int i=1; i<=n; i++) fin>>v[i];
long long s=0;
int p, u;
p=1; u=1;
d[1]=1;
for(int i=2; i<=k; i++){
while( v[d[u]]>=v[i] && p<=u){
u--;
}
u++;
d[u]=i;//imi baga cel mai recent elem
}
s=s+ v[d[p]];//primul din deque
for(int i=k+1; i<=n; i++){
while(v[d[u]]>=v[i] && p<=u){
u--;
}
u++;
d[u]=i; //actualizez ultimul elem
if(d[p]< i-k+1) p++; //actualizez primul pt ca la un moment dat va iesi din secventa
s=s+v[d[p]];
}
fout<<s;
return 0;
}