>>713
32bit 環境ですから long はいらないようですね。
ios::binary はどうなんでしょうか? とりあえず外してみました。

さらに、無理だと思われたそれ以外の個所も縮みました。
そのため、とうとう9行達成ができました。
そして、それによってさらにもう少し減るかもしれません。


#include <fstream>
typedef unsigned L;typedef unsigned char C;L W,O,u,i,l,T,K;main(int,char**V){L
b=256,a[b],A=-1;fstream g(V[2],ios::in),o(V[3],ios::out);g.seekg(0,ios::end);C
s[l=g.tellg()],t[l*2];g.seekg(0,ios::beg);for(g.read(s,l);u<b;)a[u++]=1;if(*V[
1]-68){for(o.write(&l,4);i<l;K=W){for(b=0;b<s[i];W+=A/u*a[b++]);if(K>W)for(K=O
;--K,!++t[K];);for(A=A/u++*a[s[i++]]++;A<1<<24;A<<=8)t[O++]=W>>24,W<<=8;}o.
write(t,O);o<<C(W>>24)<<C(W>>16)<<C(W>>8)<<C(W);}else{C t[l=*(L*)s];for(W=s[4]
<<24|s[5]<<16|s[6]<<8|s[O=7];i<l;A*=a[b]++){for(K=b=0;A<1<<24;A<<=8)W=W<<8|s[
++O];for(T=W/(A/=u++);T>=K;K+=a[b++]);W-=A*(K-a[t[i++]=--b]);}o.write(t,l);}}