HDU 5145 NPY and girls (莫队分块离线)
题目地址:HDU 5145
莫队真的好奇妙。。
这种复杂度竟然仅仅有n*sqrt(n)。。。
裸的莫队分块,先离线。然后按左端点分块,按块数作为第一关键字排序。然后按r值作为第二关键字进行排序。
都是从小到大,能够证明这种复杂度仅仅有n*sqrt(n)。
然后进行块之间的转移。
代码例如以下:
#include <iostream>
#include <string.h>
#include <math.h>
#include <queue>
#include <algorithm>
#include <stdlib.h>
#include <map>
#include <set>
#include <stdio.h>
#include <time.h>
using namespace std;
#define LL __int64
#define pi acos(-1.0)
//#pragma comment(linker, "/STACK:1024000000")
const int mod=1e9+7;
const int INF=0x3f3f3f3f;
const double eqs=1e-9;
const int MAXN=30000+10;
int a[MAXN];
LL ans[MAXN], inv[MAXN], ha[MAXN];
struct node
{
int l, r, id, pos;
}fei[MAXN];
bool cmp(node x, node y)
{
return x.pos<y.pos||(x.pos==y.pos&&x.r<y.r);
}
LL Pow(LL x, int k)
{
LL ans=1;
while(k){
if(k&1) ans=ans*x%mod;
x=x*x%mod;
k>>=1;
}
return ans;
}
void init()
{
for(int i=0;i<=30000;i++){
inv[i]=Pow((LL)i,mod-2);
}
}
int main()
{
int t, n, m, i, j, l, r, k, Case=0;
LL res;
//freopen("1.txt","r",stdin);
//freopen("2.txt","w",stdout);
init();
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
k=sqrt(n*1.0);
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<m;i++){
scanf("%d%d",&fei[i].l,&fei[i].r);
fei[i].id=i;
fei[i].pos=fei[i].l/k;
}
sort(fei,fei+m,cmp);
l=1;r=1;
res=1;
memset(ha,0,sizeof(ha));
ha[a[1]]=1;
for(i=0;i<m;i++){
while(r<fei[i].r){
r++;
ha[a[r]]++;
res=res*(r-l+1)%mod*inv[ha[a[r]]]%mod;
}
while(r>fei[i].r){
res=res*ha[a[r]]%mod*inv[r-l+1]%mod;
ha[a[r]]--;
r--;
}
while(l>fei[i].l){
l--;
ha[a[l]]++;
res=res*(r-l+1)%mod*inv[ha[a[l]]]%mod;
}
while(l<fei[i].l){
res=res*ha[a[l]]%mod*inv[r-l+1]%mod;
ha[a[l]]--;
l++;
}
ans[fei[i].id]=res;
}
for(i=0;i<m;i++){
printf("%I64d\n",ans[i]);
}
}
return 0;
}
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! ...
- HDU5145:5145 ( NPY and girls ) (莫队算法+排列组合+逆元)
传送门 题意 给出n个数,m次访问,每次询问[L,R]的数有多少种排列 分析 \(n,m<=30000\),我们采用莫队算法,关键在于区间如何\(O(1)\)转移,由排列组合知识得到,如果加入一 ...
- HDU 5145 NPY and girls(莫队算法+乘法逆元)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5145 [题目大意] 给出一个数列,每次求一个区间数字的非重排列数量.答案对1e9+7取模. [题解 ...
- 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 <= ...
- hdu_5145_NPY and girls(莫队算法+组合)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5145 题意:给你n,m,共有n个女孩,标号为1—n,n个数xi表示第ith个女孩在第xi个教室,然后下 ...
- Bzoj 3236: [Ahoi2013]作业 莫队,分块
3236: [Ahoi2013]作业 Time Limit: 100 Sec Memory Limit: 512 MBSubmit: 1113 Solved: 428[Submit][Status ...
- [BZOJ 3585] mex 【莫队+分块】
题目链接:BZOJ - 3585 题目分析 区间mex,即区间中没有出现的最小自然数. 那么我们使用一种莫队+分块的做法,使用莫队维护当前区间的每个数字的出现次数. 然后求mex用分块,将权值分块(显 ...
- BZOJ_3585_mex && BZOJ_3339_Rmq Problem_莫队+分块
BZOJ_3585_mex && BZOJ_3339_Rmq Problem_莫队+分块 Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一 ...
- BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块
BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块 Description Autumn和Bakser又在研究Gty的妹子序列了 ...
随机推荐
- 洛谷P3327 [SDOI2015]约数个数和 【莫比乌斯反演】
题目 设d(x)为x的约数个数,给定N.M,求\(\sum_{i = 1}^{N} \sum_{j = 1}^{M} d(ij)\) 输入格式 输入文件包含多组测试数据.第一行,一个整数T,表示测试数 ...
- BZOJ3930 [CQOI2015]选数 【容斥】
题目 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一步研 ...
- mysql explain字段意思解释
mysql explain字段意思解释 explain包含id.select_type.table.type.possible_keys.key.key_len.ref.rows.extra字段 id ...
- SQL的主键和外键和唯一约束
SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...
- 优化join语句
Mysql4.1开始支持SQL的子查询.这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中.使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的 ...
- 解决 unresolved external symbol 无法解析 _send@16(转)
(1) vc网络编程中遇到一个编译问题,原来是少了WSOCK32.LIB. 在 project-->settings-->Link-->Object/Library modules ...
- Django 博客首页视图
Django 处理 HTTP 请求 Web 应用的交互过程其实就是 HTTP 请求与响应的过程.无论是在 PC 端还是移动端,我们通常使用浏览器来上网,上网流程大致来说是这样的: 我们打开浏览器,在地 ...
- AppCode 中开发 Mac OS X 应用程序或共享库的经验小结
AppCode 是 JetBrains 公司出品的用于开发 Mac OS X 及 iOS 应用程序的集成开发环境,只能运行于 Mac OS X 操作系统环境下,作为 XCode 的高级替代品.由于其基 ...
- hdu 4503(数学,概率)
湫湫系列故事——植树节 Time Limit: 1000/500 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- js-className修改class属性
1.修改className 1)修改class类名为p-a-0 2)在保留class="p1"的基础上再添加一个类名为p-a-0 2.删除className 1).结果需删除cla ...