题意: 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的更多相关文章

  1. HDU 5145 NPY and girls 莫队+逆元

    NPY and girls Problem Description NPY's girlfriend blew him out!His honey doesn't love him any more! ...

  2. HDU 5145 NPY and girls (莫队分块离线)

    题目地址:HDU 5145 莫队真的好奇妙.. 这种复杂度竟然仅仅有n*sqrt(n)... 裸的莫队分块,先离线.然后按左端点分块,按块数作为第一关键字排序.然后按r值作为第二关键字进行排序. 都是 ...

  3. HDU 5145 NPY and girls(莫队算法+乘法逆元)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5145 [题目大意] 给出一个数列,每次求一个区间数字的非重排列数量.答案对1e9+7取模. [题解 ...

  4. HDU5145:5145 ( NPY and girls ) (莫队算法+排列组合+逆元)

    传送门 题意 给出n个数,m次访问,每次询问[L,R]的数有多少种排列 分析 \(n,m<=30000\),我们采用莫队算法,关键在于区间如何\(O(1)\)转移,由排列组合知识得到,如果加入一 ...

  5. 【HDU 5145】 NPY and girls(组合+莫队)

    pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...

  6. NPY and girls

    NPY and girls 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5145 莫队算法 注意到没有修改区间的操作,使用莫队算法:将整个区间分成若干 ...

  7. HDU 5145 分块 莫队

    给定n个数,q个询问[l,r]区间,每次询问该区间的全排列多少种. 数值都是30000规模 首先考虑计算全排列,由于有同种元素存在,相当于每次在len=r-l+1长度的空格随意放入某种元素即$\bin ...

  8. hdu 5145(莫队算法+逆元)

    NPY and girls Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  9. 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+ ...

随机推荐

  1. jQuery模糊选择

    属性字头选择器(Attribute Contains Prefix Selector) jQuery 属性字头选择器的使用格式是 jQuery(‘[attribute|=value]‘) ,例如 jQ ...

  2. 第二章——第二节 IPC机制的概述和使用

    一.Serialiable与Paracle ①.作用    ②.使用 二.Binder与AIDL ①.各自的作用 三.如何使用IPC机制 举例 四.IPC机制的原理 ①.流程图  ②.自己编译自动生成 ...

  3. 如何调用EcStore中的API接口

    EcStore系统已内置了丰富的API接口供外部系统调用(接口列表见文章最下面),外部系统具体如何调用这些API呢? 例如有一个PHP的论坛需要调用ecstore系统内一个商品的详情,则可以使用b2c ...

  4. 小插曲之变量和字符串 - 零基础入门学习Python003

    小插曲之变量和字符串 让编程改变世界 Change the world by program 变量 (此处只是省略N多细节,详细通过视频学习) 变量名就像我们现实社会的名字,把一个值赋值给一个名字时, ...

  5. 【Git】代码托管-从基本设置开始

    Git是现在比较火的一款代码托管工具,之前也有在使用GitHub,是用GitHub for windows一个图形管理的界面,如果没有这个图形控制界面的话我估计自己又要放弃了.用BASH命令来实现托管 ...

  6. WPF笔记(2.4 Grid)——Layout

    原文:WPF笔记(2.4 Grid)--Layout 第一章已经简单介绍过这个容器,这一节详细介绍.Grid一般是用表格(Grid.Row 和Grid.Column )的,比StackPanel更细致 ...

  7. js中获取键盘事件

    <script type="text/javascript" language=JavaScript charset="UTF-8"> docume ...

  8. VS2008生成的程序无法在其它电脑上运行,提示系统无法执行指定的程序

    经过一番查找,最给力的参考是 http://www.cnblogs.com/visoeclipse/archive/2010/02/27/1674866.html ------------------ ...

  9. 私有静态方法private static method-值得用吗?

    用Resharper的同学都知道,如果你写了一个私有函数,这个函数没有访问类里面的其他参数和方法,那么它建议你标记这个方法为私有静态方法,提示是这样的: 值得这样做吗?看看微软的建议: After y ...

  10. tc令牌桶限速心得

    一.实验拓扑与实验现象 实验拓扑如图所示,在①号机上发送数据,③号机上接受数据,同时在④号机的eth1与eth2网口限制速率为115200kbps,命令如下 tc qdisc add dev eth1 ...