HDU 5145 - NPY and girls
题意: 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 = ;
const int MAXN = ;
const int MAXM = ;
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 = ;
memset(num,,sizeof(num));
int L = , R = ;
for(int i = ; 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 + ) % 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 + ] % 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 + ] % 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 + ) % 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[] = ;
for(int i = ; 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 = ; i <= n; i++)
scanf("%d",&a[i]);
for(int i = ; 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 = ; i < m ;i++)
printf("%lld\n",ans[i].a);
}
}
HDU 5145 - NPY and girls的更多相关文章
- HDU 5145 NPY and girls 莫队+逆元
NPY and girls Problem Description NPY's girlfriend blew him out!His honey doesn't love him any more! ...
- HDU 5145 NPY and girls (莫队分块离线)
题目地址:HDU 5145 莫队真的好奇妙.. 这种复杂度竟然仅仅有n*sqrt(n)... 裸的莫队分块,先离线.然后按左端点分块,按块数作为第一关键字排序.然后按r值作为第二关键字进行排序. 都是 ...
- HDU 5145 NPY and girls(莫队算法+乘法逆元)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5145 [题目大意] 给出一个数列,每次求一个区间数字的非重排列数量.答案对1e9+7取模. [题解 ...
- HDU5145:5145 ( NPY and girls ) (莫队算法+排列组合+逆元)
传送门 题意 给出n个数,m次访问,每次询问[L,R]的数有多少种排列 分析 \(n,m<=30000\),我们采用莫队算法,关键在于区间如何\(O(1)\)转移,由排列组合知识得到,如果加入一 ...
- 【HDU 5145】 NPY and girls(组合+莫队)
pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...
- NPY and girls
NPY and girls 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5145 莫队算法 注意到没有修改区间的操作,使用莫队算法:将整个区间分成若干 ...
- HDU 5145 分块 莫队
给定n个数,q个询问[l,r]区间,每次询问该区间的全排列多少种. 数值都是30000规模 首先考虑计算全排列,由于有同种元素存在,相当于每次在len=r-l+1长度的空格随意放入某种元素即$\bin ...
- hdu 5145(莫队算法+逆元)
NPY and girls Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- HDU 3784 继续xxx定律 & HDU 2578 Dating with girls(1)
HDU 3784 继续xxx定律 HDU 2578 Dating with girls(1) 做3748之前要先做xxx定律 对于一个数n,如果是偶数,就把n砍掉一半:如果是奇数,把n变成 3*n+ ...
随机推荐
- UITableView总忘记的
因为总是忘记所以记一下 1.scrollToRowAtIndexPath QQ会话中总是希望添加一行就向上滚动总是显示最新的消息 NSIndexPath *lastIndexPath = [NSInd ...
- uva 230 Borrowers(摘)<vector>"结构体“ 膜拜!
I mean your borrowers of books--those mutilators of collections, spoilers of the symmetry of shelves ...
- 关于很简单的设计模式,ui-dao-database,以及JavaBean和util工具类
关于很简单的设计模式,ui-dao-database,以及JavaBean和util工具类 24. 三 / J2EE / 没有评论 简单的j2ee设计模式, UI通过DAO层访问数据库或者xml文 ...
- JQuery validator扩展
//validator 扩展 jQuery.validator.addMethod("mail", function(value, element, messages) { ret ...
- struts2 0day漏洞
描述 Apache Struts2 近日出现一个0day漏洞,该漏洞在修补CVE-2014-0050和2014-0094两个安全漏洞处理不当,分别可以导致服务器受到拒绝服务攻击和被执行恶意代码. 漏洞 ...
- py2exe 生成带图标的单个文件实例
随便拉了个学习时用的测试程序来做的实例,原程序如下: #Filename:for.py count=0 for i in range(1,100,2): count+=i else: print 't ...
- Cows(poj 2481 树状数组)
Cows Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 15301 Accepted: 5095 Description ...
- php版权重轮询调度算法
2013-09-25 <?php class WeightedRoundRobin { private static $_weightArray = array(); private stati ...
- Django uplodify 多文件同时上传
Js代码: //批量上传按钮 $('#fileupload').uploadify ({ 'swf' : '/CoveragePlaform/media/uploadify-3.2/uploadify ...
- 动态加载JS过程中如何判断JS加载完成
在正常的加载过程中,js文件的加载是同步的,也就是说在js加载的过程中,浏览器会阻塞接下来的内容的解析.这时候,动态加载便显得尤为重要了,由于它是异步加载,因此,它可以在后台自动下载,并不会妨碍其它内 ...