设$f[i][j]$表示考虑前$i$个人,第$i$个人在前$i$个人中排名为$j$的方案数。

对于大小关系相同的一段,转移可以看成求$k$次前/后缀和,任意一项对另一项的贡献仅和其下标差值有关,FFT加速即可。

时间复杂度$O(mn\log n)$。

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=65555,M=32768,P=1000000007;
int n,m,i,j,k,t,o,len,L,R,a[30],b[N],f[N*3],ans,g[N],v[N],fin[N],fac[N],inv[N],pos[N];
inline void up(int&a,int b){(a+=b)>=P&&(a-=P);}
inline int C(int n,int m){return 1LL*fac[n]*inv[m]%P*inv[n-m]%P;}
namespace FFT{
struct comp{long double r,i;comp(long double _r=0,long double _i=0){r=_r;i=_i;}comp operator+(const comp&x){return comp(r+x.r,i+x.i);}comp operator-(const comp&x){return comp(r-x.r,i-x.i);}comp operator*(const comp&x){return comp(r*x.r-i*x.i,r*x.i+i*x.r);}comp conj(){return comp(r,-i);}
}A[N],B[N];
int a0[N],b0[N],a1[N],b1[N];
const long double pi=acos(-1.0);
void FFT(comp a[],int n,int t){for(int i=1;i<n;i++)if(i<pos[i])swap(a[i],a[pos[i]]);for(int d=0;(1<<d)<n;d++){int m=1<<d,m2=m<<1;long double o=pi*2/m2*t;comp _w(cos(o),sin(o));for(int i=0;i<n;i+=m2){comp w(1,0);for(int j=0;j<m;j++){comp&A=a[i+j+m],&B=a[i+j],t=w*A;A=B-t;B=B+t;w=w*_w;}}}if(t==-1)for(int i=0;i<n;i++)a[i].r/=n;
}
void mul(int*a,int*b,int*c,int k){int i,j;for(i=0;i<k;i++)A[i]=comp(a[i],b[i]);FFT(A,k,1);for(i=0;i<k;i++){j=(k-i)&(k-1);B[i]=(A[i]*A[i]-(A[j]*A[j]).conj())*comp(0,-0.25);}FFT(B,k,-1);for(i=0;i<k;i++)c[i]=((long long)(B[i].r+0.5))%P;
}
void mulmod(int*a,int*b,int*c,int k){int i;for(i=0;i<k;i++)a0[i]=a[i]/M,b0[i]=b[i]/M;for(mul(a0,b0,a0,k),i=0;i<k;i++){c[i]=1LL*a0[i]*M*M%P;a1[i]=a[i]%M,b1[i]=b[i]%M;}for(mul(a1,b1,a1,k),i=0;i<k;i++){c[i]=(a1[i]+c[i])%P,a0[i]=(a0[i]+a1[i])%P;a1[i]=a[i]/M+a[i]%M,b1[i]=b[i]/M+b[i]%M;}for(mul(a1,b1,a1,k),i=0;i<k;i++)c[i]=(1LL*M*(a1[i]-a0[i]+P)+c[i])%P;
}
}
inline void solve(int len,int K){int i,j,k;for(k=1;k<=len;k<<=1);k<<=1;j=__builtin_ctz(k)-1;for(i=0;i<k;i++)pos[i]=pos[i>>1]>>1|((i&1)<<j);for(i=0;i<=len;i++)v[i]=C(i+K-1,K-1);for(g[0]=0;i<k;i++)v[i]=g[i]=0;FFT::mulmod(g,v,fin,k);for(i=1;i<=len;i++)g[i]=fin[i];
}
int main(){scanf("%d%d",&n,&m);for(fac[0]=i=1;i<=n*2;i++)fac[i]=1LL*fac[i-1]*i%P;for(inv[0]=inv[1]=1,i=2;i<=n*2;i++)inv[i]=1LL*(P-P/i)*inv[P%i]%P;for(i=2;i<=n*2;i++)inv[i]=1LL*inv[i-1]*inv[i]%P;for(i=1;i<=m;i++)scanf("%d",&a[i]);for(i=1;i<m;i++)for(j=a[i];j<a[i+1];j++)b[j]=i&1;for(i=a[2],L=1+N,f[R=i+N]=1;i<n;i=j){for(j=i;j<n&&b[i]==b[j];j++);t=j-i;for(k=L;k<=R;k++)g[k-L+1]=f[k];len=R-L+1;if(!b[i])reverse(g+1,g+len+1);solve(len,t);if(!b[i])reverse(g+1,g+len+1);for(k=L;k<=R;k++)f[k]=g[k-L+1];b[i]?L-=t:R+=t;}for(i=L;i<=R;i++)up(ans,f[i]);return printf("%d",ans),0;
}

  

转载于:https://www.cnblogs.com/clrs97/p/8442920.html

BZOJ4133 : Answer的排队相关推荐

  1. java sip 携带sdp_SIP中的SDP offer/answer交换初探

    1.早期媒体 无论是在PSTN还是在VoIP网络中,一个呼叫的最终目的让两个用户进行交谈(conversation).这里我们将由用户之间的交谈所产生的媒体称为常规媒体("regular m ...

  2. SIP中的SDP offer/answer交换初探

    1.引言 SDP的offer/answer模型本身独立与于使用它的高层协议.SIP是使用offer/answer模型的应用之一.RFC 3264 [3] 定义了offer/answer模型,但没有规定 ...

  3. 【线段树】矮人排队(jzoj(gz) 3236)

    矮人排队 jzoj (gz)3236 题目大意: 有n个人,高度分别为1,2--n(高度按输入来看),现在有两种操作 1:把第x个人和第y个人换一下 2:询问高度为A,A+1--B这B-A+1个人是否 ...

  4. 211大学【合工大】发生通宵考研占座排队!

    转载于 知乎 链接: https://www.zhihu.com/question/343646607/answer/808653198 昨天小编在知乎上看到一个问题: 作者:蜗牛超汽车 链接: ht ...

  5. SPOJ GSS3-Can you answer these queries III-分治+线段树区间合并

    Can you answer these queries III SPOJ - GSS3 这道题和洛谷的小白逛公园一样的题目. 传送门: 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间 ...

  6. 【青少年编程】【蓝桥杯】排队购票

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 我们将有关编程题目的教学视频已经发布到抖 ...

  7. 计算机网络的运用在什么时候,离散时间排队系统及其在计算机网络中的应用

    摘要: 该文共分四章讨论了三个模型,着重于有相关到达的离散时间排队系统.第一章为引言,回顾了排队论的历史,阐述了计算机网路的一些基本技术及术语,分析了离散时间排队系统的特殊性.在第二章中.我们考虑一个 ...

  8. 自定义表单mysql_自定义表单,计算答案然后更新mysql DB(Custom form, calculate answer then update mysql DB)...

    自定义表单,计算答案然后更新mysql DB(Custom form, calculate answer then update mysql DB) 我想要实现的是用户购买代币时的模拟支付系统. 我坚 ...

  9. P1223 排队接水

    题目描述 有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小. 输入格式 输入文件共两行,第一行为n:第二行分别表示第1个人到第 ...

最新文章

  1. centos 光盘 mysql_Centos6.5 使用光盘镜像系统源安装数据库mysql5.7
  2. python转化为字符串格式_Python格式化字符串~转
  3. 开发高性能并发应用不是一件容易的事情。这类应用的例子包括高性能Web服务器、游戏服务器和搜索引擎爬虫...
  4. asp.net mvc5 设置Area下的为启动页
  5. jsp中jquery传值给Java_jsp中利用jquery+ajax在前后台之间传递json格式参数
  6. 合作伙伴说 | 一人行快,众人行远,与网易共建万亿新生态
  7. [状态压缩DP] COJ 1129 送货到家
  8. RPM 软件包默认的安装路径
  9. kubernetes之flannel 网络分析
  10. 警惕新型“二进制植入”漏洞,立即更新至 Npm 最新版本
  11. 任务方案思考:序列标注(NER)篇
  12. 扇贝有道180927每日一句
  13. Linux配置java环境(超详细)
  14. SDU-nachos安装及初步编译
  15. Simple QQLogin 2.1(QQ登陆器,适用于 QQ2009 或更新版本)
  16. 记录淘宝里的点点滴滴
  17. hdu2017沈阳网络赛card(结论水题)
  18. unison 安装使用
  19. Nginx不停机升级
  20. Win XP iis组件补丁(ghost xp)iis5.1

热门文章

  1. CSS选择器优先级 12.28
  2. JavaScript学习(五十三)—借用构造方法继承
  3. redis 远程主机强迫关闭了一个现有的连接_如何在 Debian 10 上安装和配置 Redis 服务...
  4. 给她帮忙她也没有说给我多少钱
  5. OSS开源软件是什么
  6. 真正的创业是什么感觉?
  7. 成年男女间存在真正的友谊吗?
  8. 汇丰银行是哪个国家的
  9. 2021年是“三蛇闹春,十鼠抢粮,十一牛耕田”,啥意思?
  10. 【大事化小,小事化无】的意思和解释