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 ...
随机推荐
- ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
一.前言 1.本教程主要内容 ASP.NET Core MVC 视图引擎(Razor)简介 ASP.NET Core MVC 视图(Razor)ViewData使用示例 ASP.NET Core MV ...
- SQLServer\framework启动报异常:Module的类型初始值设定项引发异常
net framework卸载 重装 https://download.microsoft.com/download/E/4/1/E4173890-A24A-4936-9FC9-AF930FE3FA4 ...
- SQL Server 索引碎片产生原理重建索引和重新组织索引
数据库存储本身是无序的,建立了聚集索引,会按照聚集索引物理顺序存入硬盘.既键值的逻辑顺序决定了表中相应行的物理顺序 多数情况下,数据库读取频率远高于写入频率,索引的存在 为了读取速度牺牲写入速度 页 ...
- Asp.Net登陆记住用户功能实现
1.效果和原理 原理是利用Asp.net的Cookies.选中CheckBox,把输入的用户名和密码用Cookies存储起来,设置过期时间7天,超过时间自动清除Cookie信息. 2.前台代码 < ...
- RHEL6 删除软RAID
停止使用RAID: 1.umount raid组上的硬盘的所用的分区 若使用raid组创建vg,需要删除或去激活VG 2.停止raid服务 mdadm -S /dev/md0 3.清除MBR # md ...
- Python开发【前端篇】HTML
1.html概述和基本结构 html概述 HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制作网页的 ...
- velocity模板引擎 -- java.io.FileNotFoundException: velocity.log (Permission denied)
问题原因是velocity的日志框架导致(velocity是使用自己封装的日志框架记录日志的),velocity在初始化Logger时,如果没有读取到配置文件,则会使用默认的velocity.log做 ...
- elementUI el-select 中disabled设置
<el-select v-model="userForm.roleName" placeholder="请选择用户角色" :disabled=" ...
- android系统中如何通过程序打开某个AccessibilityService
android系统中如何通过程序打开某个AccessibilityService(系统辅助服务)? 通常的做法是注册AccessibilityService(辅助服务)后跳转到设置启动服务页面引导用户 ...
- 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)
基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势) 前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...