Cod sursa(job #2077316)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 27 noiembrie 2017 21:44:46
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");

int n,i,v[5000003],a[5000003],x,k,l,h[5000003],m,j;

void Up(int k,int m)
{
int t,f;
f=k;
t=f/2;
while(t&&v[h[t]]>v[h[f]])
{
swap(h[t],h[f]);
f=t;
t=f/2;
}
}

void Down(int k,int m)
{
int t,f;
t=k;
f=k*2;
while(f<=m)
{
if(f<m)
{
if(v[h[f]]>v[h[f+1]])f++;
}
if(v[h[t]]>v[h[f]])
{
swap(h[t],h[f]);
t=f;
f=f*2;
}
else
{
f=m+1;
}
}
}

int Minim()
{
while(a[h[1]]==1)
{
h[1]=h[l];
l--;
Down(1,l);
}
return v[h[1]];
}

void Inserare(int y)
{
m++;
l++;
v[m]=y;
a[m]=0;
h[l]=m;
Up(l,l);
}

int main()
{
long long s;
fin>>n>>k;
m=0;
l=0;
s=0;
for(i=1;i<=n;i++)
{
fin>>v[i];
}
for(i=1;i<=k;i++)
{
Inserare(v[i]);
}
s=s+Minim();
a[1]=1;
for(i=2;i<=n-k+1;i++)
{
Inserare(v[i+k-1]);
s=s+Minim();
a[i]=1;
}
fout<<s;
fin.close();
fout.close();
return 0;
}