Cod sursa(job #2213046)
Utilizator | Data | 15 iunie 2018 16:13:43 | |
---|---|---|---|
Problema | Deque | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.53 kb |
#include <cstdio>
using namespace std;
const int N=5000000;
int d[N],v[N],n,k;
int main()
{
freopen("deque.in","r",stdin);
freopen("deque.out","w",stdout);
int st=0,dr=-1,s=0;
for(int i=1;i<n;i++)
{
scanf("%d",v[i]);///scot st
if(d[st]==(i-k))
st++;
///scot din dreapta acele poz pe care nu voi avea min
while(st<=dr&&v[i]<=v[d[dr]])
{
--dr;
}
d[++dr]=i;
if(i>=k-1)
s+=v[d[st]];
}
printf("%d\n",s);
return 0;
}