题目地址: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;
}

最新文章

  1. HTML 事件(一) 事件的介绍
  2. C和指针 第十一章 习题
  3. asp的gridview
  4. 基于springmvc和restClient的rest服务的测试
  5. ubuntu eclipse 不能新建javaweb项目解决方案
  6. 逻辑回归&amp;&amp;code
  7. 数据结构(括号序列,线段树||点分治,堆):ZJOI 2007 捉迷藏
  8. jqplot配置详解
  9. 转:Qt 嵌入式开发环境搭建
  10. jQuery插件实现的方法和原理简单说明
  11. 如何学好java
  12. 关于Java项目打包成Runnable jar文件后运行时图片不显示的问题
  13. 在vue中使用Autoprefixed
  14. .net core WebApi Monitor实现并发同步
  15. es6Math对象新增的方法
  16. SlimScroll插件学习
  17. LeetCode题解之Pascal&#39;s Triangle II
  18. 三)mybatis 二级缓存,整合ehcache
  19. mysql高效索引之覆盖索引
  20. 【WPF】MVVM动态修改Bingding的另一种思路——用Style样式

热门文章

  1. HDU——2067小兔的棋盘(卡特兰数&amp;递推DP)
  2. NOJ——1659求值(log10取对数+floor取整数部分+可有可无的快速幂)
  3. CodeforcesD. Aztec Catacombs
  4. vim学习总揽
  5. php转换字符编码为utf-8
  6. Careercup | Chapter 6
  7. IntelliJ IDEA提示:Class JavaLaunchHelper is implemented in both的错误解决
  8. javascript 函数初探 (五)--- 几种类型的函数
  9. 017.View与窗口:AttachInfo
  10. Hierarchical data in postgres