HDU_1175_莫队+逆元
http://acm.hdu.edu.cn/showproblem.php?pid=5145
初探莫队,就是离线排序后的暴力,但是效率大大提高,中间要除法取模,所以用到了逆元。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define LL long long
#define MOD 1000000007
using namespace std; int a[],num[],n,m,sizee;
LL ans[],inv[];
struct node
{
int l,r,num,belong;
}query[]; void init()
{
for(int i = ;i <= ;i++)
{
LL temp = ,x = i;
int pow = MOD-;
while(pow)
{
if(pow%) temp = temp*x%MOD;
x = x*x%MOD;
pow /= ;
}
inv[i] = temp;
}
} int cmp(node x,node y)
{
if(x.belong == y.belong) return x.r < y.r;
return x.l<y.l;
} int main()
{
init();
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
sizee = sqrt(n);
for(int i = ;i <= n;i++) scanf("%d",&a[i]);
for(int i = ;i <= m;i++)
{
scanf("%d%d",&query[i].l,&query[i].r);
query[i].num = i;
query[i].belong = (query[i].l-)/sizee+;
}
sort(query+,query++m,cmp);
memset(num,,sizeof(num));
int ll = ,rr = ;
LL now = ;
num[a[]]++;
for(int i = ;i <= m;i++)
{
while(rr < query[i].r)
{
rr++;
num[a[rr]]++;
now = now*(rr-ll+)%MOD*inv[num[a[rr]]]%MOD;
}
while(ll > query[i].l)
{
ll--;
num[a[ll]]++;
now = now*(rr-ll+)%MOD*inv[num[a[ll]]]%MOD;
}
while(ll < query[i].l)
{
now = now*num[a[ll]]%MOD*inv[rr-ll+]%MOD;
num[a[ll]]--;
ll++;
}
while(rr > query[i].r)
{
now = now*num[a[rr]]%MOD*inv[rr-ll+]%MOD;
num[a[rr]]--;
rr--;
}
ans[query[i].num] = now;
}
for(int i = ;i <= m;i++) printf("%lld\n",ans[i]);
}
return ;
}
HDU_1175_莫队+逆元的更多相关文章
- HDU 5145 NPY and girls 莫队+逆元
NPY and girls Problem Description NPY's girlfriend blew him out!His honey doesn't love him any more! ...
- 吉首大学2019年程序设计竞赛(重现赛)I 滑稽树上滑稽果 (莫队+逆元打表)
链接:https://ac.nowcoder.com/acm/contest/992/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K ...
- HDU 5145 NPY and girls(莫队算法+乘法逆元)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5145 [题目大意] 给出一个数列,每次求一个区间数字的非重排列数量.答案对1e9+7取模. [题解 ...
- 2018 Multi-University Training Contest 4 Problem B. Harvest of Apples 【莫队+排列组合+逆元预处理技巧】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6333 Problem B. Harvest of Apples Time Limit: 4000/200 ...
- HDOJ:6333-Problem B. Harvest of Apples(组合数学+莫队算法+逆元)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6333 解题心得: 这个题可以说是十分精彩了,首先推组合数学的公式,其中一个很重要的公式是Cnm = C ...
- Problem B. Harvest of Apples(杭电2018年多校+组合数+逆元+莫队)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6333 题目: 题意:求C(n,0)+C(n,1)+……+C(n,m)的值. 思路:由于t和n数值范围太 ...
- HDU 6333.Problem B. Harvest of Apples-组合数C(n,0)到C(n,m)求和-组合数学(逆元)+莫队 ((2018 Multi-University Training Contest 4 1002))
2018 Multi-University Training Contest 4 6333.Problem B. Harvest of Apples 题意很好懂,就是组合数求和. 官方题解: 我来叨叨 ...
- hdu 5145(莫队算法+逆元)
NPY and girls Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- Harvest of Apples (HDU多校第四场 B) (HDU 6333 ) 莫队 + 组合数 + 逆元
题意大致是有n个苹果,问你最多拿走m个苹果有多少种拿法.题目非常简单,就是求C(n,0)+...+C(n,m)的组合数的和,但是询问足足有1e5个,然后n,m都是1e5的范围,直接暴力的话肯定时间炸到 ...
随机推荐
- Echarts大数据可视化物流航向省份流向迁徙动态图,开发全解+完美参数注释
最近在研究Echarts的相关案例,毕竟现在大数据比较流行,比较了D3.js.superset等相关的图表插件,还是觉得echarts更简单上手些. 本文是以原生JS为基础,如果使用Vue.js的话, ...
- gcc 命令详解
1. gcc -E source_file.c-E,只执行到预编译.直接输出预编译结果. 2. gcc -S source_file.c -S,只执行到源代码到汇编代码的转换,输出汇编代码. 3. g ...
- 浅谈Java三大特性之封装
目录 前言 好处 介绍(实现方式) 示例 小结 感谢阅读!!! 三大特性之浅谈封装 前言 英语:Encapsulation--封装,包装. 面向对象的封装与真实世界的目的是一样的.封装能够使外部访问者 ...
- js绑定下拉框数据源
··· buildRule:function (ruleId) { var ruleList = internal.ruleList; if(ruleList){ var programme_sel= ...
- 自定义实现的ArrayList以及自定义实现的Iterator迭代器
ArrayList的底层是长度可动态变化的数组,其适用于查找多,修改少的情况,原因是数组的元素的增加删除元素会涉及大量元素的移动,效率比较低,ArrayList中的元素可以重复,与插入时的顺序相同,可 ...
- Spark读写ES
本文主要介绍spark sql读写es.structured streaming写入es以及一些参数的配置 ES官方提供了对spark的支持,可以直接通过spark读写es,具体可以参考ES Spar ...
- Spring Boot2 系列教程 (十四) | 统一异常处理
如题,今天介绍 SpringBoot 是如何统一处理全局异常的.SpringBoot 中的全局异常处理主要起作用的两个注解是 @ControllerAdvice 和 @ExceptionHandler ...
- LGV - 求多条不相交路径的方案数
推荐博客 :https://blog.csdn.net/qq_25576697/article/details/81138213 链接:https://www.nowcoder.com/acm/con ...
- 获取当前URL
HttpContext.Current.Request.Url.ToString();
- 前端笔记5-js1
一.在JS中一共有6种数据类型1. String 字符串2. Number 数值3. Boolean 布尔值4. Null 空值5. Undefined 未定义6. Object 对象 其中 Stri ...