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 ...
随机推荐
- Jquery 使用和Jquery选择器
jQuery中的顶级对象($) jQuery 中最常用的对象即 $ 对象,要想使用 jQuery 的方法必须通过 $ 对象.只有将普通的 Dom 对象封装成 jQuery 对象,然后才能调用 jQue ...
- [20190415]11g下那些latch是共享的.txt
[20190415]11g下那些latch是共享的.txt http://andreynikolaev.wordpress.com/2010/11/23/shared-latches-by-oracl ...
- 解决Linux系统下Mysql数据库中文显示成问号的问题
当我们将开发好的javaWEB项目部署到linux系统上,操作数据库的时候,会出现中文乱码问题,比如做插入操作,发现添加到数据库的数据中文出现论码,下面就将解决linux下mysql中文乱码问题! 打 ...
- SQL Server数据库————连接查询和分组查询
SQL Server数据库————连接查询和分组查询 分组查询 select 列from <表名> where …… group by 列 注意:跟order by一样group ...
- Linux 系统进程相关命令
1.pstree :可以使用pstree命令来查看系统中进程的分布结构. 2.ps: 常用于查看系统进程的命令是ps(process status)命令,可通过它来查看系统进程的最基本信息. ●-A ...
- Altium Designer 复制和粘贴功能
在使用Altium Deigner时,很多时候会使用到复制和粘贴功能,Altium Designer复制分为三步:第一步选中要复制的内容(包括点选和框选),第二步,启动COPY命令,这时光标会变成十字 ...
- 转 Angular2优质学习资源收集
文档博客书籍类 官方网站: https://angular.io 中文站点: https://angular.cn Victor的blog(Victor是Angular路由模块的作者): https: ...
- HBase实践案例:知乎 AI 用户模型服务性能优化实践
用户模型简介 知乎 AI 用户模型服务于知乎两亿多用户,主要为首页.推荐.广告.知识服务.想法.关注页等业务场景提供数据和服务, 例如首页个性化 Feed 的召回和排序.相关回答等用到的用户长期兴趣特 ...
- Koa 框架介绍
Node.js 是一个异步的世界,官方 API 支持的都是 callback 形式的异步编程模型,这 会带来许多问题,例如:callback 嵌套问题 ,异步函数中可能同步调用 callback 返回 ...
- js 获取纯web地址栏中URL传参
function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +&quo ...