Pagini recente » Cod sursa (job #1580774) | Cod sursa (job #705203) | Cod sursa (job #730987) | Cod sursa (job #2922596) | Cod sursa (job #825609)
Cod sursa(job #825609)
#include<stdio.h>
FILE *f = fopen("deque.in","r");
FILE *g = fopen("deque.out","w");
struct pair
{
int first,second;
} ;
#define MaxN 5000100
struct priority_queue
{
pair A[MaxN];
int size;
priority_queue(void)
{
size = 0;
}
inline void swap(pair &a,pair &b)
{
pair aux = a;
a = b;
b = aux;
}
inline void push(pair val)
{
A[++size] = val;
for(int p = size;p>>1 > 0 && A[p].first < A[p>>1].first;swap(A[p],A[p>>1]),p>>=1);
}
inline void pushDOWN(void)
{
int pozM;
for(int p=1;(p<<1 <= size && A[p<<1].first < A[p].first) ||
((p<<1)+1 <= size && A[(p<<1)+1].first < A[p].first);)
{
pozM = p<<1;
if(pozM + 1 <= size && A[pozM+1].first < A[pozM].first)
++ pozM;
swap(A[p],A[pozM]);
p = pozM;
}
}
inline void pop(void)
{
A[1] = A[size--];
pushDOWN();
}
inline pair top(void)
{
return A[1];
}
};
#define ll long long
int N,K;
ll Sol;
priority_queue Q;
inline pair make_pair(int a,int b)
{
pair c = {a,b};
return c;
}
void citire(void)
{
fscanf(f,"%d %d",&N,&K);
}
void Rezolvare(void)
{
int a;
for(int i=1;i<=K;i++)
{
fscanf(f,"%d",&a);
Q.push(make_pair(a,i));
}
for(int i=K+1;i<=N+1;i++)
{
for(;Q.top().second < i-K;Q.pop());
Sol += 1LL*Q.top().first;
fscanf(f,"%d",&a);
Q.push(make_pair(a,i));
}
}
int main()
{
citire();
Rezolvare();
fprintf(g,"%lld\n",Sol);
}