一.题目链接:

HDU-5145

二.题目大意:

NPY 要在 n 个女朋友里面选取一个去约会,有些女朋友可能会同班.

女朋友编号为 1 ~ n.

为了不引起矛盾,NPY 在一个班里只会选取一名女朋友去约会.

问在第 i ~ j 个女朋友之间选择,有多少种选法(考虑顺序不同,最终答案 % 1000000007).

三.分析:

先来看选法如何计算

假设在第 i ~ j 中选取,则共有 j - i + 1 个人,在不考虑同班的情况下共有 ( j - i + 1 ) ! 种取法.

假设第 i 班的女朋友数为 cnt[i]

则选取数为   

对于题目描述来说

这是一个典型的离线算法区间处理问题,很明显用莫队算法.

接着考虑的就是莫队算法 while 循环里的操作.

由选取数公式得:加入一个元素,就乘以 ( j - i + 1 ) 并除以 cnt[i].

可惜不能直接除,删除一个元素同理.

那就计算 cnt[i] 的乘法逆元 用费马小定理( Mod 为质数 )就可以做.

初始化打表即可.

四.代码实现:

#include <set>
#include <map>
#include <ctime>
#include <queue>
#include <cmath>
#include <stack>
#include <vector>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define eps 1e-4
#define PI acos(-1.0)
#define ll long long int
using namespace std;const int M = (int)3e4 + 10;
ll Mod = 1000000007;
int a[M];
int cnt[M];
int block;
ll rev[M];
ll res[M];
struct node
{int l;int r;int id;
} s[M];ll quick_power(ll a, ll b)
{ll sum = 1;while(b){if(b & 1)sum = sum * a % Mod;a = a * a % Mod;b >>= 1;}return sum % Mod;
}void modui(int n, int m)
{int l, r;l = 1;r = 0;ll sum = 1;for(int i = 0; i < m; ++i){while(r < s[i].r){r++;cnt[a[r]]++;sum = sum * (r - l + 1) % Mod * rev[cnt[a[r]]] % Mod;}while(r > s[i].r){sum = sum * cnt[a[r]] % Mod * rev[r - l + 1] % Mod;cnt[a[r]]--;r--;}while(l < s[i].l){sum = sum * cnt[a[l]] % Mod * rev[r - l + 1] % Mod;cnt[a[l]]--;l++;}while(l > s[i].l){l--;cnt[a[l]]++;sum = sum * (r - l + 1) % Mod * rev[cnt[a[l]]] % Mod;}res[s[i].id] = sum;}
}int cmp(node a, node b)
{if(a.l / block != b.l / block)return a.l / block < b.l / block;return a.r < b.r;
}void init()
{for(int i = 0; i < M; ++i)rev[i] = quick_power(i, Mod - 2);
}int main()
{init();int T;scanf("%d", &T);while(T--){memset(cnt, 0, sizeof(cnt));memset(res, 0, sizeof(res));int n, m;scanf("%d %d", &n, &m);block = (int)sqrt(n + 0.5);for(int i = 1; i <= n; ++i)scanf("%d", &a[i]);for(int i = 0; i < m; ++i){int l, r;scanf("%d %d", &l, &r);s[i].l = l;s[i].r = r;s[i].id = i;}sort(s, s + m, cmp);modui(n, m);for(int i = 0; i < m; ++i)printf("%lld\n", res[i]);}return 0;
}

NPY and girls (HDU - 5145,莫队算法 + 乘法逆元)相关推荐

  1. hdu 4358(莫队算法+dfs序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4358 解题思路:用dfs求出整棵树的dfs序列,这样以u为根节点的子树就转化到相对应的区间上了.由于是 ...

  2. hdu 5145 NPY and girls (莫队算法)

    题意:有一个长度为n的数字序列,m次询问一个区间l-r中数字重新排列的方案数(mod 10^9+7). 明显的莫队算法,只需要排序,然后预处理一下逆元就可以了. 所谓的莫队算法,最初版本是求曼哈顿距离 ...

  3. hdu 5213(容斥原理+莫队算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5213 莫队算法是离线处理一类区间不修改查询类问题的算法.就是如果你知道了[L,R]的答案.你可以在O( ...

  4. hdu 5381 2015多校第八场 莫队算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5381 还没学过莫队算法....网上也找不到莫队算法的论文,只能勉强看着别人的代码打下来... 稍微介绍 ...

  5. Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组

    题目链接 题意求给区间[L,R]中有少对(i,j)满足i<j且abs(a[i]-a[j])<=k. 首先来说暴力的方法就是离散化,然后用树状数组来维护,但是m次询问,m很大,所以说一定会t ...

  6. [HDU](6333)Problem B. Harvest of Apples ---- 数论+莫队算法

    Problem Description There are n apples on a tree, numbered from 1 to n. Count the number of ways to ...

  7. NBUT 1457 Sona(莫队算法+离散化)

    [1457] Sona 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Sona, Maven of the Strings. Of cause, she can play the ...

  8. XOR and Favorite Number CF340E 莫队算法

    题目链接 题意:求给定询问区间[L,R]问有多少连续区间异或值等k,多次询问可以离线. a[i]^a[i+1]^a[i+2]^a[n]=(a[1]^a[2]^a[3]^...^a[i-1])^(a[1 ...

  9. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 9894  Solved: 4561 [Su ...

  10. 数据结构(莫队算法):国家集训队2010 小Z的袜子

    [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从1到 ...

最新文章

  1. Nature:复杂菌群空间分布研究
  2. RabbitMQ消息队列生产者和消费者
  3. python线程池超过最大数量_python自定义线程池控制线程数量
  4. 2013年最值得我们学习的网页作品示例【系列六】
  5. 【操作系统】虚拟化CPU、Memory,共享文件
  6. ANTLR VS FLEXBISON
  7. 【51Nod - 1279】 扔盘子(思维)(on-p会超时)
  8. 浅析ThreadLocal
  9. Spring源码学习路线
  10. 10大最重要的Web安全风险之三----A3,错误的认证和会话管理
  11. 腾讯云三大自研数据库之一 TBase 开源后首次重磅升级,复杂查询性能最高提升十倍
  12. createwindow 和 dialogbox的区别
  13. 计算机编程算法和数学有什么关系?
  14. 系统架构设计-计算机网络知识点
  15. GIS 地图坐标系相互转换的方法学习笔记
  16. 建模软件MAYA最详细的教程介绍来了
  17. 计算机英语怎么念视频,计算机的英语怎么念
  18. 关联规则—频繁项集Apriori算法
  19. 杠杆炒股选择几倍比较适合?
  20. 2020-11-22

热门文章

  1. 管理信息系统(MIS)期末复习参考指南
  2. PPT如何压缩?PPT文件压缩的方法有哪些
  3. PowerBI使用折线图分析异常数据
  4. 图灵大会 | 新观点:AI盛世,其实我们离得还很远
  5. 短视频剪辑入门技巧,简单却重要
  6. word中如何插入参考文献
  7. linux增加分区大小,新增硬盘扩容Linux下的分区大小
  8. 或是独体字吗_独体字
  9. vue中detele删除对象属性时视图不能响应更新 - 解决办法
  10. 极化SAR图像特征提取与分类方法研究