描述

  • 每个询问在一行中输出分数A/B表示从该询问的区间[L,R]中随机抽出两只袜子颜色相同的概率。
分析
  • 区间无修改的题目, 只需要求出各种颜色的数量即可, 所以可以用莫队.
  • 如果一种颜色 i 在区间 [L, R] 内的数目是 c[i], 那么随机抽出两只袜子颜色相同的概率等于 ΣC(c[i], 2) / C(R-L+1, 2).
  • 发现组合数的 m 位置都是2, 所以直接展开来算, 得到 Σc[i]*(c[i]-1) / [(R-L+1)*(R-L)].
  • 这样分母我们已知, 分子可以通过状态转移得到, 每次如果新加入一个结点, 颜色为 a, 则先减掉原来 a 对分子的贡献即 c[i]*(c[i]-1), 然后++c[i], 再让分子加上现在 a颜色对分子的贡献, 即 c[i]*(c[i]-1). 删掉一个结点类似. 所以就用 O(1) 的时间从 [L, R] 转移到了 [L-1, R] 或者 [L+1, R] 或者 [L, R-1] 或者 [L, R+1].
  • 再计算分子分母的gcd即可
  • 不要忘记开 long long.
#include #include #include using namespace std;
typedef long long int lli;
const int maxn = 50000 + 10;
int size;
int A[maxn];
int c[maxn];
lli X[maxn], Y[maxn];
struct Query {
int L, R, id;
bool operator < (const Query& rhs) const {
if(L/size != rhs.L/size) return L < rhs.L;
return R < rhs.R;
}
} Q[maxn];
#define q Q[i]
lli gcd(lli a, lli b) {
return b == 0 ? a : gcd(b, a % b);
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i++)
scanf("%d", &A[i]);
for(int i = 1; i <= m; i++)
scanf("%d %d", &q.L, &q.R), q.id = i;
size = sqrt(n);
sort(Q+1, Q+m+1);
int L = 1, R = 0;
lli x = 0;
for(int i = 1; i <= m; i++) {
while(L < q.L) {
x -= (lli) c[A[L]] * (c[A[L]]-1);
c[A[L]]--;
x += (lli) c[A[L]] * (c[A[L]]-1);
L++;
}
while(R > q.R) {
x -= (lli) c[A[R]] * (c[A[R]]-1);
c[A[R]]--;
x += (lli) c[A[R]] * (c[A[R]]-1);
R--;
}
while(L > q.L) {
L--;
x -= (lli) c[A[L]] * (c[A[L]]-1);
c[A[L]]++;
x += (lli) c[A[L]] * (c[A[L]]-1);
}
while(R < q.R) {
R++;
x -= (lli) c[A[R]] * (c[A[R]]-1);
c[A[R]]++;
x += (lli) c[A[R]] * (c[A[R]]-1);
}
if(x == 0) {
X[q.id] = 0;
Y[q.id] = 1;
continue;
}
X[q.id] = x;
Y[q.id] = (lli)(q.R-q.L+1) * (q.R-q.L);
lli g = gcd(X[q.id], Y[q.id]);
X[q.id] /= g;
Y[q.id] /= g;
}
for(int i = 1; i <= m; i++) printf("%lld/%lld\n", X[i], Y[i]);
return 0;
}

BZOJ-2038-小Z的袜子hose-莫队相关推荐

  1. HYSBZ - 2038 小Z的袜子(hose) (莫队入门)

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

  2. 2038: [2009国家集训队]小Z的袜子(hose)+莫队入门

    题目链接:2038: [2009国家集训队]小Z的袜子(hose) 题目: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再 ...

  3. [BZOJ2038] [2009国家集训队] 小Z的袜子(hose) (莫队)

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

  4. 【bzoj2038】[2009国家集训队]小Z的袜子(hose) 莫队算法

    原文地址:http://www.cnblogs.com/GXZlegend/p/6803860.html 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终 ...

  5. bzoj2038: [2009国家集训队]小Z的袜子(hose) 莫队

    Time Limit: 20 Sec Memory Limit: 259 MB Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小 ...

  6. BZOJ 2038 小Z的袜子(hose)(分组)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2038 题意:给出n个袜子.m个询问,每个询问一个区间[L,R],询问这个区间中任意拿出两 ...

  7. 【清橙 A1206】小Z的袜子(莫队算法)

    [清橙 A1206]小Z的袜子(莫队算法) A1206. 小Z的袜子 时间限制:1.0s   内存限制:512.0MB   总提交次数:1144   AC次数:319   平均分:43.15 将本题分 ...

  8. (莫队算法)2038: 小Z的袜子(hose)

    今天学习了一个新的套路:莫队算法 这个算法是用于离线求解区间查询问题的. 区间查询问题通常是如下形式: 给出一个数组1,1,1,1,2,2,2,2,3,3,3,3.... 求解在[l1,r1][l2, ...

  9. BZOJ2038 小Z的袜子 (莫队算法)

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 专题练习: http://acm.hust.edu.cn/vjudge/conte ...

  10. BZOJ 2038: [2009国家集训队]小Z的袜子(莫队算法例题)

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

最新文章

  1. wps怎么投递简历发到boss直聘_2020年疫情时期,在厦门的你怎么开启新工作
  2. SpringBoot24 SpringDataJPA环境搭建、实体类注解、关联查询
  3. java 等待_Java并发之等待/通知机制
  4. pat-1136. A Delayed Palindrome (20) 模拟
  5. [Error]SyntaxError: unindent does not match any outer indentation level
  6. python二分法查找程序_Python程序查找地板划分
  7. 【实战】使用Job来修改Transform
  8. bootstrap表格遍历_BootStrap实现带有增删改查功能的表格(DEMO详解)
  9. 解决:My97DatePicker 日期插件引用在PHP文件中maxDate和minDate控制失效问题
  10. 怎样设置电脑壁纸_怎样把C盘设置成禁止安装任何软件?教你两个方法,告别电脑卡顿...
  11. 获取json格式的内容数据时,使用的方法避免空指针
  12. centos查询 硬盘序列号查询_关于使用java执行shell脚本获取centos的硬盘序列号和mac地址...
  13. 51单片机——自动浇花系统(含全部代码)
  14. 远程控制软件TeamViewer轻松解决企业运维难题
  15. redis 客户端连接及常用命令使用
  16. 大型连锁百货运维审计用什么软件好?有哪些功能?
  17. 百度地图 前端html,前端js调用百度地图常用基本功能
  18. RuntimeError: Unable to open shape_predictor_68_face_landmarks.dat
  19. 【毕业设计】基于STM32的宠物自动喂食装置
  20. 一个从业(非正品)奢侈品十年从业者的经验和历程。

热门文章

  1. 科大星云诗社动态20210304
  2. 第05课:神经网络基础知识
  3. php将soap返回的xml转成数组,PHP – 在PHP中将XML转换为数组 – 在php中解析soap xml并将其存储在数据库中...
  4. 在一个配置文件中联系多个数据库
  5. 计算机网络第五章-运输层学习笔记
  6. 堆的C语言实现——堆与堆排序(二)
  7. 在 C 中引用汇编语言定义的 .globl 变量
  8. DM368开发 -- 制作ubifs文件系统
  9. C语言再学习 -- 标识符
  10. 总结java父类构造函数对子类构造函数的影响