#pragma once
structFloatBinomial{vector<longdouble>f;staticconstexprlongdoubleLOGZERO=-1e10;FloatBinomial(intMAX){f.resize(MAX+1,0.0);f[0]=0.0;for(inti=1;i<=MAX;i++){f[i]=f[i-1]+logl(i);}}longdoublelogfac(intn)const{returnf[n];}longdoublelogfinv(intn)const{return-f[n];}longdoublelogC(intn,intk)const{if(n<k||k<0||n<0)returnLOGZERO;returnf[n]-f[n-k]-f[k];}longdoublelogP(intn,intk)const{if(n<k||k<0||n<0)returnLOGZERO;returnf[n]-f[n-k];}};