首先将值域离散化成$O(n)$个连续段. 设$f[i][j][k]$表示第$i$个学校派出的数量在第$j$个连续段,在第$j$个连续段一共有$k$个学校的方案数.用组合数以及前缀和转移即可. 时间复杂度$O(n^3)$. #include<cstdio> #include<algorithm> const int N=502,M=N*2,P=1000000007; int n,m,i,j,k,t,len,inv[N],a[N],b[N],c[M],C[M][N],f[N][M],g…
参考:https://blog.csdn.net/wxh010910/article/details/55806735 以下课件,可并堆部分写的左偏树 #include<iostream> #include<cstdio> using namespace std; const int N=600005; int n,m,tot,fa[N],len[N],rt[N],d[N],cnt; long long p[N],sum; int read() { int r=0,f=1; cha…