Pagini recente » Cod sursa (job #1079839) | Cod sursa (job #1525568) | Cod sursa (job #2793968) | Cod sursa (job #2811437) | Cod sursa (job #1060846)
#include<fstream>
using namespace std;
int p=0,v[5000001],w[5000001],k;
long long s=0;
void add(int x,int i)
{
v[++p]=x;
w[p]=i;
int t=p;
if(t/2>0)while(v[t]<v[t/2])
{
v[t]=v[t/2]+v[t];
v[t/2]=v[t]-v[t/2];
v[t]=v[t]-v[t/2];
w[t]=w[t/2]+w[t];
w[t/2]=w[t]-w[t/2];
w[t]=w[t]-w[t/2];
t=t/2;
if(t/2<=0)break;
}
while(w[1]<=i-k)
{
v[1]=v[p];
w[1]=w[p];
p--;t=1;
if(2*t+1<=p)
while(v[t]>v[2*t]||v[t]>v[2*t+1])
if(v[2*t]<v[2*t+1])
{ v[t]=v[t]+v[t*2];
v[t*2]=v[t]-v[2*t];
v[t]=v[t]-v[2*t];
w[t]=w[t]+w[t*2];
w[t*2]=w[t]-w[2*t];
w[t]=w[t]-w[2*t];
t=t*2;
if(t*2+1>p)break;
}
else
{ v[t]=v[t]+v[t*2+1];
v[t*2+1]=v[t]-v[2*t+1];
v[t]=v[t]-v[2*t+1];
w[t]=w[t]+w[t*2+1];
w[t*2+1]=w[t]-w[2*t+1];
w[t]=w[t]-w[2*t+1];
t=t*2+1;
if(2*t+1>p)break;
}
if(2*t==p&&v[t]>v[2*t])
{ v[t]=v[t]+v[t*2];
v[t*2]=v[t]-v[2*t];
v[t]=v[t]-v[2*t];
w[t]=w[t]+w[t*2];
w[t*2]=w[t]-w[2*t];
w[t]=v[t]-w[2*t];
t=t*2;
}
}
if(i>=k)
{
s=s+v[1];
}
}
int main()
{
ifstream fcin("deque.in");
ofstream fcout("deque.out");
int n,i,x;
fcin>>n>>k;
for(i=1;i<=n;i++)
{fcin>>x;
add(x,i);
}
fcout<<s<<'\n';
return 0;
}