Pagini recente » Cod sursa (job #1901589) | Cod sursa (job #1745393) | Cod sursa (job #2851804) | Cod sursa (job #2163703) | Cod sursa (job #1046723)
#include<fstream>
#include<queue>
#include<algorithm>
#include<iostream>
using namespace std;
ifstream f ("deque.in");
ofstream g("deque.out");
queue <int> Qnod,Qpoz;
int n,k,p,i,j,sol,v[5000005],x;
void push(int x, int &k)
{
v[++k]=x;
Qnod.push(x);
if (k == 1)
{
Qpoz.push(k);
return;
}
else
{
int i = k;
while (v[i] < v[i/2] && i/2)
{
swap(v[i],v[i/2]);
i = i/2;
}
Qpoz.push(i);
}
}
void pop(int x, int &k)
{
int i = 1, poz = -1, st, dr;
swap(v[x],v[k]);
k--;
do
{
st = 2*i, dr = 2*i+1;
poz = -1;
if (st <= k)
poz = st;
if (poz != -1 && dr <= k && v[dr] < v[poz])
poz = dr;
if (poz != -1)
{
if (v[i] > v[poz])
{
swap(v[i],v[poz]);
i = poz;
}
else poz = -1;
}
} while (poz != -1);
Qnod.pop();
Qpoz.pop();
}
int main ()
{
f >> n >> p;
for (i = 1; i <= n; i++)
{
f >> x;
push(x,k);
if (i >= p)
{
cout<<v[1]<<" ";
sol += v[1];
int j=Qpoz.front();
//for (i = 1; i <= k; i++)
// cout << v[i]<<" ";
//cout<<"\n";
pop(j,k);
}
}
g<<sol;
f.close();
g.close();
return 0;
}