P1494 [国家集训队]小Z的袜子

题意:

有一个长度为 n 的序列c[i] 。现在给出 m个询问,每次给出两个数l,r ,从编号在 l 到 r 之间的数中随机选出两个不同的数,求两个数相等的概率。

题解:

很明显,莫队算法
无修改,可离线查询
我认为本题的难点在于。。。如何求概率(捂脸)
我们设col[i]为当前颜色i出现的次数,ans为当前的可行的配对方案(也就是有多少种烤烟选到一双颜色相同的袜子)
每次移动都会更新答案,如果当前颜色是k,如果是增长区间,ans就要加上,如果是缩短区间长度,就是ans减去
这两个式子应该能明白把
那么这次查询的答案就是,更改后的ans / C2r-l+1(也就是方案数除以总方案)
哇好麻烦哭了哭了,但是这里是有优化的

这样一顿操作,增加区间时ans只需要加col[k]
缩短区间时ans只需要减(col[k]–)
总时间复杂度是O(N*√N)

代码:

用的奇偶性排序

#include <algorithm>
#include <cmath>
#include <cstdio>
using namespace std;
const int N = 50005;
int n, m, maxn;
int c[N];
long long sum;
int cnt[N];
long long ans1[N], ans2[N];
struct query {int l, r, id;bool operator<(const query &x) const {if (l / maxn != x.l / maxn) return l < x.l;return (l / maxn) & 1 ? r < x.r : r > x.r;}
} a[N];
void add(int i) {sum += cnt[i];cnt[i]++;
}
void del(int i) {cnt[i]--;sum -= cnt[i];
}
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
int main() {scanf("%d%d", &n, &m);maxn = sqrt(n);for (int i = 1; i <= n; i++) scanf("%d", &c[i]);for (int i = 0; i < m; i++) scanf("%d%d", &a[i].l, &a[i].r), a[i].id = i;sort(a, a + m);for (int i = 0, l = 1, r = 0; i < m; i++) {if (a[i].l == a[i].r) {ans1[a[i].id] = 0, ans2[a[i].id] = 1;continue;}while (l > a[i].l) add(c[--l]);while (r < a[i].r) add(c[++r]);while (l < a[i].l) del(c[l++]);while (r > a[i].r) del(c[r--]);ans1[a[i].id] = sum;ans2[a[i].id] = (long long)(r - l + 1) * (r - l) / 2;}for (int i = 0; i < m; i++) {if (ans1[i] != 0) {long long g = gcd(ans1[i], ans2[i]);ans1[i] /= g, ans2[i] /= g;} elseans2[i] = 1;printf("%lld/%lld\n", ans1[i], ans2[i]);}return 0;
}

P1494 [国家集训队]小Z的袜子相关推荐

  1. 洛谷P1494 [国家集训队]小Z的袜子

    P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- ...

  2. P1494 [国家集训队]小Z的袜子/莫队学习笔记(误

    P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...

  3. 洛谷 P1494 [国家集训队]小Z的袜子

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

  4. 洛谷P1494 [国家集训队]小Z的袜子 莫队

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

  5. 并不对劲的bzoj2038:p1494:[国家集训队]小Z的袜子

    题目大意 有\(n\)(\(n\leq5*10^4\))个数\(a_1,a_2,...,a_n\)(\(\forall i\in[1,n], 1\leq a_i\leq n\)) \(m\)(\(m\ ...

  6. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 9894  Solved: 4561 [Su ...

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

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

  8. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块

    分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 2938  Solved: 13 ...

  9. BZOJ2038 : [2009国家集训队]小Z的袜子(hose)(莫队算法)

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 19269 Solved: 8851 [Sub ...

最新文章

  1. 您的安全设置不允许网站使用安装在您的计算机上的ActiveX控件的解决方法
  2. boost::describe模块宏BOOST_DESCRIBE_PP_POINTER的测试程序
  3. 从容 IT 人生路,开发工具伴我行——“葡萄城 30 周年”征文
  4. spark多个kafka source采用同一个group id导致的消费堆积延迟
  5. Zabbix4.2安装和4.0升级4.2笔记
  6. RxJava -- 从 create 开始 (一)
  7. 多继承完美闪避成员名冲突的问题
  8. 一个非计算机专业的 软考初级 程序员考试之路
  9. mesa3d源代码阅读笔记
  10. 梯度下降与一元线性回归
  11. 使用JS将table表格导出为excel
  12. 微信小程序真机调试连接不到后台服务器,解决微信小程序wepy真机预览跟本地表现不一样,数据变化了视图没变化...
  13. 有限元-朗格朗日和欧拉描述的区别
  14. 2022网安保研经验帖
  15. 优维科技携EASYOPS3.0亮相GOPS深圳站
  16. 准备入手iPhone 4港版的必看!港行无锁版iPhone 4购买全攻略
  17. android最新源码(4.4.2_r1版本以上)下载
  18. 如何有效阅读caffe源码
  19. 百度名词~杂篇--(对日常遇到事物的深入了解)
  20. Lyra——开启下一个十亿用户的语音通话

热门文章

  1. 让TA们告诉你,疫情当下如何更彪悍的成长
  2. 每日一笑 | 一个男人逐渐变心的过程
  3. bitmap 转byte[]后读取_闲谈redis的bitmap
  4. qt显示echart_Qt配置,载入html,Echart, 交互
  5. flex布局_Flex布局,真香
  6. 苹果手机透明桌面_原来苹果手机辨别真假很容易!查看桌面1个图标,就能轻松分辨...
  7. promise 浏览器实现的源码_【大前端01-01】函数式编程与JS异步编程、手写Promise...
  8. 学妹问我Java枚举类与注解,我直接用这个搞定她!
  9. 网学天地计算机组成与原理试题,哈工大2007年秋季学期计算机组成原理期末试题...
  10. java 接口的静态方法_Java8新特性:接口的默认方法与接口的静态方法