P1494 [国家集训队]小Z的袜子
题目
解析
- 在区间\([l,r]\)内,
任选两只袜子,有
\]
\]
\]
种选择。
- 对于一种颜色
设在区间\([l,r]\)内出现次数为\(cnt_i\)
从\(cnt_i\)只这种颜色的袜子里任选两只
就有$$cnt_i\choose2$$
\]
\]
\]
种方案。
3. 那对于区间内所有颜色的袜子,任选两只颜色相同的方案是
\]
\]
这样得到能抽到两只相同颜色的袜子概率是
\]
\]
因为区间内所有颜色的袜子出现的次数加起来就是区间长度\(r-l+1\)
所以就有
\]
这样对于一个询问的区间,\(r-l+1\)是一定值,这样,我们就只需要用莫队维护\(cnt_i^2\)得到的价值就可以了。
当新加入一个元素的时候\((cnt_i+1)^2=cnt_i^2+2cnt_i+1\),sum就加上\(2cnt_i+1\)。
删除一个元素的时候,sum就减去\(2cnt_i-1\)即可。
最后注意特判分子等于0的情况,否则会RE。
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5e4 + 10;
int n, m, num, sum;
int fz[N], fm[N], a[N], cnt[N];
class node {
public :
int l, r, id, block;
bool operator < (const node &oth) const {
return this->block != oth.block ? this->l < oth.l : (this->block & 1 ? this->r < oth.r : this->r > oth.r);
}
} e[N];
template<class T>inline void read(T &x) {
x = 0; int f = 0; char ch = getchar();
while (!isdigit(ch)) f |= (ch == '-'), ch = getchar();
while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
x = f ? -x : x;
return;
}
inline void add(int x) {sum += (cnt[a[x]] * 2 + 1), cnt[a[x]]++;};
inline void del(int x) {sum -= (cnt[a[x]] * 2 - 1), cnt[a[x]]--;};
int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);}
signed main() {
read(n), read(m);
int k = sqrt(n);
for (int i = 1; i <= n; ++i) read(a[i]);
for (int i = 1, x, y; i <= m; ++i) {
read(x), read(y);
e[i] = (node) {x, y, i, x / k + 1};
}
sort(e + 1, e + 1 + m);
int l = 1, r = 0;
for (int i = 1; i <= m; ++i) {
int ll = e[i].l, rr = e[i].r;
while (l < ll) del(l++);
while (l > ll) add(--l);
while (r < rr) add(++r);
while (r > rr) del(r--);
if (ll == rr) {
fz[e[i].id] = 0;
fm[e[i].id] = 1;
continue;
}
fz[e[i].id] = sum - (rr - ll + 1), fm[e[i].id] = (rr - ll + 1) * (rr - ll);
int GCD = gcd(fz[e[i].id], fm[e[i].id]);
fz[e[i].id] /= GCD, fm[e[i].id] /= GCD;
}
for (int i = 1; i <= m; ++i) {
if (fz[i] == 0) printf("0/1\n");
else printf("%lld/%lld\n", fz[i], fm[i]);
}
}
P1494 [国家集训队]小Z的袜子的更多相关文章
- P1494 [国家集训队]小Z的袜子/莫队学习笔记(误
P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...
- P1494 [国家集训队]小Z的袜子(luogu)
P1494 小Z的袜子 终于了解了莫队算法(更专业的名称Square Root Decomposition of Queries) 莫队算法: 一般来说解决静态(实际上也有修改的但复杂度更高)的离线( ...
- 洛谷 P1494 [国家集训队] 小Z的袜子
题目概述: 小Z把N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬. 你的任务 ...
- luogu P1494 [国家集训队]小Z的袜子 ( 普 通 )
题目: 链接:https://www.luogu.org/problemnew/show/P1494 题意:一些袜子排成一排,每个袜子有固定的颜色. ...
- P1494 [国家集训队]小Z的袜子(莫队)
题目链接:https://www.luogu.org/problemnew/show/P1494 题目大意:中文题目 具体思路:计算概率的时候,每一次是区间的移动,每一次移动,记得先将原来的记录的影响 ...
- Luogu P1494 [国家集训队]小Z的袜子
比较简单的莫队题,主要是为了熟练板子. 先考虑固定区间时我们怎么计算,假设区间\([l,r]\)内颜色为\(i\)的袜子有\(cnt_i\)只,那么对于颜色\(i\)来说,凑齐一双的情况个数为: \( ...
- 【luogu P1494 [国家集训队]小Z的袜子】 题解
题目链接:https://www.luogu.org/problemnew/show/P1494 #include <cstdio> #include <algorithm> ...
- 洛谷 P1494 [国家集训队]小Z的袜子(莫队)
题目链接:https://www.luogu.com.cn/problem/P1494 一道很经典的莫队模板题,然而每道莫队题的大体轮廓都差不多. 首先莫队是一种基于分块的算法,它的显著特点就是: 能 ...
- P1494 [国家集训队]小Z的袜子(莫队算法)
莫队板子 代码 #include <cstdio> #include <algorithm> #include <cstring> #include <cma ...
随机推荐
- 仿9GAG制作过程(一)
有话要说: 准备开始学习Android应用程序的一个完整的设计过程.准备做一个仿9GAG的APP,前端界面设计+后台数据爬虫+后台接口设计,整个流程体验一遍.今天准备先把前端界面的框架给完成了. 成果 ...
- Python:运算类内建函数列举
1. divmod() python3.x版本中,整除运算用 “//”,取余可以用 “%”,在某些问题中要同时得到商和余数就需要两步运算,而使用divmod函数可以同时得到商和余数: 函数有两个参数d ...
- ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
一.前言 1.本教程主要内容 ASP.NET Core MVC 视图引擎(Razor)简介 ASP.NET Core MVC 视图(Razor)ViewData使用示例 ASP.NET Core MV ...
- Expression
表达式目录树 1.什么是表达式目录树Expression? 表达式目录树是一个数据结构,语法树. 首先我们去看看 Expressions类 ,定义了一个泛型委托类型 TDelegate: // 摘要: ...
- 利用ZYNQ SOC快速打开算法验证通路(5)——system generator算法IP导入IP integrator
一.前言 利用FPGA设计算法一直以来都是热点,同样也是难点.将复杂的数学公式 模型通过硬件系统来搭建,在低延时 高并行性等优势背后极大提高了设计难度和开发周期.Xilinx公司的sysGen(sys ...
- 使用mybatis操作AS400数据库
先简单说一下怎么使用[jt400.jar]连接AS400上的DB2数据库. ※ jt400.jar资源,如果有安装AS400客户端的话,参考IBM官网 ※ http://www-01.ibm.com/ ...
- 总结JAVA----IO流中的File类
对于IO流中File类的总结 File类的基本概念 File类只能用于完成对于文件属性(是否存在.可读性.长度)的一些操作,不能用于文件的访问. File类的对象 File类的对象存储的是文件的绝对路 ...
- MySQL之ORM框架SQLAlchemy
一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...
- 手把手教你实现Android RecyclerView上拉加载功能
摘要 一直在用到RecyclerView时都会微微一颤,因为一直都没去了解怎么实现上拉加载,受够了每次去Github找开源引入,因为感觉就为了一个上拉加载功能而去引入一大堆你不知道有多少BUG的代码, ...
- app原生和H5混合使用自动化
1.从原生切换到H5需要 driver.switch_to.context('WEBVIEW_com.tencent.mm:tools') 2.参考连接: https://testerhome.com ...