题意: cases T(1≤T≤10) (0<n,m≤30000) (0<ai≤30000)
      

    n个数ai 表示n个女孩所在教室

    m次询问 [L,R](1 <= L <= R <= n)
     

    问访问所有女孩的顺序方案数(进教室顺序)为多少(一次进教室只能访问一个人)
    
分析:

    莫队算法 + 排列数

    一个区间内的方案数为 C(m,c1)*C(m-c1,c2)*C(m-c1-c2,c3)*....*C(cn,cn)
      

    每次转移通过下式:

     C(m+1,n+1) = C(m,n) * (m+1/n+1)
         

     C(m,n) = C(m+1,n+1) * (n+1/m+1) (对于缩小的过程而言)
    
      因为需要对大素数取模,除法就是乘上对应的乘法逆元,故先用费马小定理

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
const int MOD = 1000000007;
const int MAXN = 30005;
const int MAXM = 30005;
struct Query
{int L,R,id;
}node[MAXM];
struct Ans
{long long a;
}ans[MAXM];
int a[MAXN],num[MAXN];
long long inv[MAXN];//乘法逆元
int t,n,m,unit;
void work()
{long long temp = 1;memset(num,0,sizeof(num));int L = 1 , R = 0;for(int i = 0; i < m ; i++){while(R < node[i].R)//C(m+1,n+1) = C(m,n)*(m+1/n+1)
        {R++;num[a[R]]++;temp = temp * (R - L + 1) % MOD * inv[num[a[R]]] % MOD;}while(R > node[i].R)//C(m,n) = C(m+1,n+1)*(n+1/m+1)
        {temp = temp * num[a[R]] % MOD * inv[R - L + 1] % MOD;num[a[R]]--;R--;}while(L < node[i].L)//C(m,n) = C(m+1,n+1)*(n+1/m+1)
        {temp = temp * num[a[L]] % MOD * inv[R - L + 1] % MOD;num[a[L]]--;L++;}while(L > node[i].L)//C(m+1,n+1) = C(m,n)*(m+1/n+1)
        {L--;num[a[L]]++;temp = temp * (R - L + 1) % MOD * inv[num[a[L]]] % MOD;}ans[node[i].id].a = temp;}
}
bool cmp(Query a,Query b)
{if(a.L/unit != b.L/unit) return a.L/unit < b.L/unit;else return a.R < b.R;
}
void Init()//femat
{inv[1] = 1;for(int i = 2; i < MAXN; i++) inv[i] = inv[MOD % i] * (MOD - MOD / i) % MOD;
}
int main()
{Init();scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(int i = 1; i <= n; i++) scanf("%d",&a[i]);for(int i = 0; i < m; i++){scanf("%d%d",&node[i].L,&node[i].R);node[i].id = i;}unit = (int)sqrt(n);sort(node,node+m,cmp);work();for(int i = 0; i < m ;i++)printf("%lld\n",ans[i].a);}
} 

转载于:https://www.cnblogs.com/nicetomeetu/p/5709207.html

HDU 5145 - NPY and girls相关推荐

  1. hdu 5145 NPY and girls (莫队算法)

    题意:有一个长度为n的数字序列,m次询问一个区间l-r中数字重新排列的方案数(mod 10^9+7). 明显的莫队算法,只需要排序,然后预处理一下逆元就可以了. 所谓的莫队算法,最初版本是求曼哈顿距离 ...

  2. hdu 5144 NPY and shot(三分)

    http://acm.hdu.edu.cn/showproblem.php?pid=5144 题意 :给出初速度 v 和高度 h 求最远斜抛距离 思路:根据物理公式推出 距离  s=v*cos(x)* ...

  3. 阿里云nginx服务器多站点的配置

    Fighting! 欲戴皇冠,必承其重! 目录视图 摘要视图 订阅 [活动]Python创意编程活动开始啦!!!    CSDN日报20170426 --<四无年轻人如何逆袭>    [C ...

  4. HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)

    HDU 1068 :题目链接 题意:一些男孩和女孩,给出一些人物关系,然后问能找到最多有多少个人都互不认识. 转换一下:就是大家都不认识的人,即最大独立集合 #include <iostream ...

  5. (step6.3.2)hdu 1068(Girls and Boys——二分图的最大独立集)

    题目大意:第一行输入一个整数n,表示有n个节点.在接下来的n行中,每行的输入数据的格式是: 1: (2) 4 6 :表示编号为1的人认识2个人,他们分别是4.6: 求,最多能找到多少个人,他们互不认识 ...

  6. HDU 2574 HDOJ 2574 Hdu Girls' Day ACM 2574 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋   因为 大于 1 << 16 的和数都能用 1 -- 1<<16 之间的素数表示, 不能表示的肯 ...

  7. [manacher] hdu 3294 Girls#39; research

    题意: 给一个字符x代表真实的a 然后输出的时候转换 然后就是求最长回文子串的串是什么 长度要大于1 思路: 就是裸的manacher,弄清楚下标的转换关系就好了 代码: #include" ...

  8. HDU4730--We Love MOE Girls HDU(148)

    草,这么简单的题,我们15分钟才出来,这次排名靠后因为水题没切好啊 #include <iostream> #include <cstdio> #include <cst ...

  9. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

最新文章

  1. formValidator BUG
  2. ‘utf-8‘ codec can‘t encode character ‘\udcc0‘ in position 35
  3. 从“等等”到“秒开”再到“直开”,是什么让闲鱼社区相见恨晚?
  4. 108. Convert Sorted Array to Binary Search Tree
  5. Bootstrap系列 -- 26. 下拉菜单标题
  6. 系统微服务签发token
  7. 2007浙大复试上机考试题目1--最小长方形
  8. 深入浅出TensorFlow(二):TensorFlow解决MNIST问题入门
  9. pythonhelloworld项目,10分钟搭建一个小型网页(python django)(hello world!)
  10. Flex游戏篇——游戏开发概述
  11. 【ROM定制】Fastboot Enhance —— 适合人类使用的Fastboot + Payload.bin 解包工具箱
  12. apa引用要在文中吗_【019】写作格式 | APA 7th style 引用格式
  13. lena图的直方图以及与其他图像的直方图匹配
  14. php文件改后缀,php 如何修改文件后缀
  15. linkedin解封_工程师如何在LinkedIn上找到(以及如何隐藏)
  16. 【c++】cout.setf(left)、cout.setf(right)详解
  17. Excel表格如何设置下拉选项并应用到整列
  18. adapter.notify()、notifyAll()、notifyDataSetChanged ()、notifyDataSetInvalidated ()的区别
  19. bugku 杂项 图穷匕见 wp
  20. npm模块之opn使用教程(译)

热门文章

  1. html5 的有那些新标签,Html5新标签都有那些
  2. 2017年9月计算机二级c语言,2017年9月计算机二级C语言程序设计练习题
  3. linux ppp漏洞,Linux下ppp拨号的实现(Arm)
  4. 分布式光伏补贴_四川:2020年起工商业分布式光伏已无补贴
  5. linux shell运行脚本命令行参数,shell脚本命令行参数简介
  6. qt调用mysql调用了存储过_Qt调用Server SQL中的存储过程
  7. linux的nfs端口号,#Linux NFS服务 固定端口及防火墙配置#
  8. 大学期末考java编程题_大学java期末考试考试题和答案
  9. spring注入普通java类_普通java类如何取得注入spring Ioc容器的对象
  10. oracle ora 00283,【案例】Oracle报错ORA-16433非归档丢失redo无法启动的恢复过程