Cod sursa(job #813306)
| Utilizator | Data | 15 noiembrie 2012 10:25:25 | |
|---|---|---|---|
| Problema | Deque | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.62 kb |
#include <stdio.h>
#include <stdlib.h>
FILE*f;
FILE*g;
#define maxn 5000001
int A[ maxn ],deq[ maxn ], poz[ maxn ];
long long s;
int n,k,i,st,dr;
int main()
{
f=fopen("deque.in","r");
g=fopen("deque.out","w");
fscanf(f,"%d%d",&n,&k);s=0;
for (i=1;i<=n;i++)
fscanf(f,"%d",&A[i]);
st=1;dr=0;
for (i=1;i<=n;i++)
{ while ((A[i]<=deq[dr]) && (st<=dr))
dr--;
deq[++dr]=A[i];
poz[dr] = i;
if (poz[st]==i-k) st++;
if (i>=k) s=s+deq[st];
}
fprintf(g,"%lld",s);
return 0;
}
3 