Pagini recente » Cod sursa (job #1559112) | Cod sursa (job #2084372) | Cod sursa (job #50064) | Cod sursa (job #24772) | Cod sursa (job #1424764)
#include <fstream>
#define dim 20000001
using namespace std;
ifstream fin("interclasari.in");
ofstream fout("interclasari.out");
int heap[dim],v[dim],i,j,k,f,n,m,ans;
void upDate(int pozi)
{
while(pozi/2>0)
{
if(v[heap[pozi]]<v[heap[pozi/2]])
{
swap(heap[pozi],heap[pozi/2]);
pozi/=2;
}
else
break;
}
}
void downDate(int pozi)
{
int po;
while(pozi*2<=k)
{
po=pozi*2;
if(po+1<=k&&v[heap[po]]>v[heap[po+1]])
po++;
if(v[heap[pozi]]>v[heap[po]])
{
swap(heap[pozi],heap[po]);
pozi=po;
}
else
break;
}
}
int main()
{
fin>>n;
for(i=1;i<=n;i++)
{
fin>>m;
ans+=m;
for(j=1;j<=m;j++)
{
fin>>v[++f];
heap[++k]=f;
upDate(k);
}
}
fout<<ans<<'\n';
for(i=1;i<ans;i++)
{
fout<<v[heap[1]]<<" ";
heap[1]=heap[k];
k--;
downDate(1);
}
fout<<v[heap[1]];
return 0;
}