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的妹子序列了 ...
随机推荐
- POJ——3264Balanced Lineup(RMQ模版水题)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 44112 Accepted: 20713 ...
- [AtCoderContest010D]Decrementing
[AtCoderContest010D]Decrementing 试题描述 There are \(N\) integers written on a blackboard. The \(i\)-th ...
- NOI2016 区间 【线段树】
题目 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x,使得对于每一个被 ...
- 数表(bzoj 3529)
Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a ...
- 标准C程序设计七---76
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 51深入理解C指针之---指针与线程
一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:size_t类型表示C中任何对象所能表示的最大长度,是个无符号整数:常常定义在stdio.h或stdlib.h中 ...
- GSMArena battery life test
GSMArena battery life test Battery Endurance Score = [ Battery Capacity / ( call hrs * a + Browsing ...
- Purpose of XMLString::transcode
原文地址http://stackoverflow.com/questions/9826518/purpose-of-xmlstringtranscode I don't seem to underst ...
- AC日记——城市 洛谷 P1401
题目描述 N(2<=n<=200)个城市,M(1<=m<=40000)条无向边,你要找T(1<=T<=200)条从城市1到城市N的路,使得最长的边的长度最小,边不能 ...
- vue生命周期回调方法
最近在用vue开发一个商品列表页,因需要根据请求回的字段是否有内容来显示隐藏该字段, 但因为vue异步加载导致显示隐藏方法不起作业(主要是判断条件取不到页面渲染内容),围观了vue生命周期后发现upd ...