礼物

题目大意

数据范围


题解

这题有意思啊($md$卡常

直接做怎么做?

随便上个什么东西,维护一下矩阵乘和插入,比如说常数还算小的$KD-Tree$(反正我是没见人过过

我们漏掉了一个条件,就是所有二元组都是随机的。

这个条件很好,它几乎就保证了,任选一个区间的话,优秀二元组只有$log$个。

这是为什么呢?

其实区间内,优秀二元组的个数,就相当于把区间按照$x$排序后,$y$值是前缀最大值的期望个数。

因为二元组是随机的,所以$x$排序后,$y$仍然是随机的。

就是给定一个随机数列,求前缀最大值的期望个数。

这是调和级数的。

所以,我们就开一棵线段树,线段树上每个节点维护一个数组,存这个节点管辖区间内的优秀二元组。

合并用归并,复杂度是$O(log)$的。

所以每次查询的复杂度是$O(log^2n)$的。

总复杂度是$O(nlog^2n)$的,有点小卡常,加了输出优化才过(读入优化是必备。

代码

#include <bits/stdc++.h>#define N 200010 using namespace std;int head[N], to[N << 1], nxt[N << 1], tot;char *p1, *p2, buf[100000];#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )int rd() {int x = 0, f = 1;char c = nc();while (c < 48) {if (c == '-')f = -1;c = nc();}while (c > 47) {x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();}return x * f;
}inline void add(int x, int y) {to[ ++ tot] = y;nxt[tot] = head[x];head[x] = tot;
}int d[N], x[N], y[N];int main() {int n = rd(), k = rd();for (int i = 2; i <= n; i ++ ) {x[i] = rd(), y[i] = rd();d[x[i]] ++ ;d[y[i]] ++ ;}int mx = 0;for (int i = 2; i <= n; i ++ ) {int s1 = d[x[i]], s2 = d[y[i]];if (s1 < s2)swap(s1, s2);if (s1 >= 3) {if (s2 >= 3) {mx = max(mx, 2);}else if(s2 <= 2) {mx = max(mx, 1);}}}int sum = 0;for (int i = 1; i <= n; i ++ ) {if (d[i] == 1) {sum ++ ;}}mx *= k;cout << sum - mx << endl ;return 0;
}

小结:这种期望的题还是要自己证才行,不然结论根本记不过来。

转载于:https://www.cnblogs.com/ShuraK/p/11256723.html

[计蒜客T2238]礼物_线段树_归并排序_概率期望相关推荐

  1. 【原创】tyvj1038 忠诚 计蒜客 管家的忠诚 线段树(单点更新,区间查询)...

    [原创]tyvj1038 忠诚 & 计蒜客 管家的忠诚 & 线段树(单点更新,区间查询) 最简单的线段树之一,中文题目,不翻译.... 注释讲的比较少,这已经是最简单的线段树,如果看不 ...

  2. 计蒜客 2238 礼物 期望 + 线段树 + 归并

    题目链接:T2238   礼物 考虑 $[l,r]$ 区间中哪些二元组是优秀二元组: 发现将二元组的 $x$ 按照从大到小排序,若 $y[i]$ 是这个前缀的最大值,则该二元组是优秀的. 因为数据是随 ...

  3. 计蒜客 - Distance on the tree(树链剖分+离线处理+线段树)

    题目链接:点击查看 题目大意:给出一颗含有n个节点的树,每条边都有权值,现在给出m个询问,每次询问的格式为u,v,w,我们需要求出在路径u-v上,边权小于等于w的边的个数 题目分析:因为一开始不会主席 ...

  4. M - Kill the tree 计蒜客 - 42552(2019icpc徐州/树的重心/树形dp)

    vj地址 题目大意:找到每一颗子树的重心 思路: 树的重心的性质: 树的重心如果不唯一,则至多有两个,且这两个重心相邻 通过连接一条端点分别在两个树的边,来将两个树合并成一个,那么新的重心肯定是在原来 ...

  5. 计蒜客-青出于蓝胜于蓝 dfs+树状数组

    题目描述: 武当派一共有 n人,门派内 n 人按照武功高低进行排名,武功最高的人排名第 1,次高的人排名第 2,... 武功最低的人排名第 n.现在我们用武功的排名来给每个人标号,除了祖师爷,每个人都 ...

  6. 找工作、备考、面试刷题网站推荐(牛客网、力扣、计蒜客、hihocoder、七月在线)以及acm竞赛oj

    不管是找工作笔试面试白板试进大厂,还是研究生参加初试复试,数据结构和算法都是都是重中之重,刷题就很必要,来拿走自己的offer 吧! 一.offer刷题推荐 1.牛客网 链接:牛客网 - 找工作神器| ...

  7. 计蒜客 - 新年礼物

    计蒜客 新年礼物 新年了,蒜厂 BOSS 要给小蒜头们发新年礼物,新年礼物有很多份,怎么分配这些礼物呢?蒜厂 BOSS 打算让大家玩一个游戏. 蒜头们可以从抽奖箱里抽出 NNN 个字符串,第 iii ...

  8. K - Triangle 计蒜客 - 42405

    K - Triangle 计蒜客 - 42405 题意: 给你一个三角形的三点,再给你三角形边上一个点,让你求另一个点(也要在三角形上),使得平分三角形的面积 题解: 计算几何 三角形的三边ab,ac ...

  9. 在线计算机 授课,在线计算机教育网站计蒜客改版 推出算法竞赛课程

    [赛迪网讯]4月16日消息,近日,新型在线计算教育平台计蒜客进行了重大改版,网站从底层架构到课程内容都进行了大幅调整.计蒜客新版除了服务速度和稳定性大幅提升外,还对用户的学习体验进行了优化:同时,计蒜 ...

最新文章

  1. Java内存模型与线程
  2. PyTorch 常用代码段示例整理
  3. 面试官灵魂的一击:你懂MySQL事务吗?
  4. VTK修炼之道58:图形基本操作进阶_点云配准技术(迭代最近点ICP算法)
  5. 日志规范之slf4j整合JDK14以及Simple的使用
  6. Transifex与GTK文档翻译, Linux镜像文件, 外设接口杂谈
  7. 多元线性回归中多重共线性_多重共线性如何在线性回归中成为问题。
  8. 给定某年日期及该年第一天是星期几然后显示该年的日历
  9. php system 返回值126,exec – PHP return_val是126
  10. 本期期刊主题:ASP.NET技术与JavaScript技巧,包括控件等
  11. 数据库设计经验浅谈(3,4,5)转载
  12. Linux下make -j加快编译速度
  13. python常用中文分词方法_中文分词原理及常用Python中文分词库介绍
  14. Textview属性Kotlin.Android
  15. python刷网易云_GitHub - a744451680/python_wangyiyun: python 网易云打卡自动刷300
  16. 下载安装SQL server2008的步骤
  17. 外置硬盘一插就卡_为什么电脑一插移动硬盘就卡死了?
  18. TK-StringVar
  19. 空气质量监控系统中的车库CO浓度监控系统
  20. 面试英语经典问答 (转)

热门文章

  1. 如何给图片批量加水印?
  2. java web项目中hibernate导入问题解决, AbstractInterceptor
  3. Windows电脑10实用小技巧
  4. linux shell permission denied,Linux系统出现permission denied问题解决措施
  5. 阿里开源分布式事务seata demo示例(原Fescar)
  6. 医院导诊图怎么做?目前比较好用的医院导航地图是哪一款?
  7. FCFS和SJF进程调度算法的实现
  8. python--判断是否闰年
  9. 2017年江苏省计算机三级,江苏省2017计算机三级等级考试偏软复习重点.txt
  10. 红外对管应用电路_红外发射接收对管基本应用电路示意图