Cod sursa(job #3210476)

Utilizator Gergo123Schradi Gergo Gergo123 Data 6 martie 2024 12:21:12
Problema Coduri Huffman Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include<iostream>
#include<fstream>

using namespace std;

ifstream F("huffman.in");
ofstream G("huffman.out");

#define N 1000100

struct O {
    long long v;
    int f[2];
}d[2*N];

int n,i,j,k,p,l[2],r[2],q[2][N],g[N];
long long b[N],m,s;

void D(int p,long long c,int n)
{
    if(d[p].f[0])
        D(d[p].f[0],c*2,n+1),D(d[p].f[1],c*2+1,n+1);
    else
        g[p]=n,b[p]=c;
}

int main()
{
    F>>n;
    for(i=1;i<=n;++i)
        F>>d[i].v,q[0][i]=i;
    for(k=n,l[0]=l[1]=1,r[0]=n;l[0]+l[1]<=r[0]+r[1];s+=d[k].v,q[1][++r[1]]=k)
        for(++k,j=0;j<2;++j) {
            for(p=i=0,m=1LL<<60;i<2;++i)
                if(d[q[i][l[i]]].v<m&&l[i]<=r[i])
                    p=i,m=d[q[i][l[i]]].v;
            d[k].f[j]=q[p][l[p]],d[k].v+=d[q[p][l[p]]].v,++l[p];
        }
    D(k,0,0),G<<s<<"\n";
    for(i=1;i<=n;++i)
        G<<g[i]<<" "<<b[i]<<"\n";
    return 0;
}