首页 > 其他分享 >2024.10.5 LGJ Round

2024.10.5 LGJ Round

时间:2024-10-05 20:10:58浏览次数:7  
标签:LGJ 2024.10 le 匹配 划分 枚举 当前 区间 Round

A

给定 \(n\) 个区间,你要选出最多区间对数,使得每一对的区间都不交。\(n\le 4e5\)。

反悔贪心,我们将所有区间按 \(l_i\) 从小到大排序,一个一个加入,加入的时候有两种情况。
1.之前的区间中存在未匹配的区间,且可以跟当前区间匹配。我们随便选择一个区间跟当前区间匹配即可。
2.找不到可以跟当前区间匹配的未匹配的区间。我们在已经匹配的区间对 \((i,j)\) 中找到 \(r_j\) 最小的一个区间对,如果 \(r_j\) 比当前区间的 \(r\) 小,我们可以交换这两个区间,让 \(i\) 跟当前区间匹配,把 \(j\) 变成未匹配区间。

B

有一个 \(1\sim n\) 的排列 \(a\) 和一个大根堆,你要依此来生成排列 \(b\)。你可以进行两种操作中的一种
i. 将当前 \(a_i\) 插入堆,且 \(i\gets i+1\)。 ii. 将堆顶元素弹出并排到 \(b\) 的末尾。
问生成 \(b\) 的不同的个数。\(n\le 100\)。

好题。设 \(1\) 在 \(a\) 中的位置是 \(p\),在 \(b\) 中的位置是 \(q\),那么 \(p\le q\),考虑枚举 \(q\)。
寻找切入点,不难发现,取出 \(1\) 这个数之后堆一定是空的。所以 \(a\) 与 \(b\) 前 \(q\) 个数的集合相同。
那么很明显就可以划分子任务,将 \(a\) 划分为 \([1,q]\),\([q+1,n]\) 两个段,他们之间是独立的。
其中 \([1,q]\) 这个区间要去掉 \(1\)。注意不是 \([1,q-1]\),因为 \(q\) 是其在 \(b\) 中的位置。
划分了子任务之后,枚举除了 \(1\) 最小值的位置,那么其弹出时堆是空的(忽略 \(1\))。
所以设 \(dp_{l,r,v}\) 表示考虑了区间 \([l,r]\) 里 \(\ge v\) 的数的方案数,复杂度 \(O(n^4)\)。
转移的时候枚举 \(q\),需要保证 \(a_q\ge v\)。因为 \(<v\) 的我们已经忽视掉了,相当于直接删去,没有影响。
这种划分子任务的方式很新颖呢,本来我的想法是前缀划分,但是无法描述一个堆的状态而告负。

C

定义平衡的 01 序列满足任意子区间 01 个数差 \(\le k\),问有 $ n$ 个 \(0\),\(m\) 个 \(1\) 平衡序列有多少个。
\(n+m,k\le 5e7\)。

典题。填 \(0\) 转化为向右走,填 \(1\) 转化为向左走,相当于格路计数。
我们要满足其能被两条 \(y=x+b\),\(y=x+(b+k)\) 的直线包裹住,即不穿过。
考虑枚举这两条直线,然后注意到会算重,所以我们考虑减去 \(k-1\) 的答案。
然后就是经典的反射容斥,复杂度是 \(O(\dfrac{n+m}{k})\),刚好与枚举直线的 \(k\) 抵消了。

标签:LGJ,2024.10,le,匹配,划分,枚举,当前,区间,Round
From: https://www.cnblogs.com/Simon-Gao/p/18448410

相关文章

  • 2024.10.5 LGJ Round
    A给定\(n\)个区间,你要选出最多区间对数,使得每一对的区间都不交。\(n\le4e5\)。反悔贪心,我们将所有区间按\(l_i\)从小到大排序,一个一个加入,加入的时候有两种情况。1.之前的区间中存在未匹配的区间,且可以跟当前区间匹配。我们随便选择一个区间跟当前区间匹配即可。2.找不到......
  • 2024.10.4(周五)
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><title>工资核算信息</title><style>/*整体页面布局和样式*/......
  • 2024.10.7(周一)
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><title>车间班组</title><style>/*整体页面布局和样式*/......
  • 《代码大全》阅读笔记1(2024.10.4)
    第一章:引言软件构建的艺术:介绍了软件开发的复杂性,以及编写高质量代码的重要性。强调了良好的编码习惯不仅能提高代码的可读性和可维护性,也能降低后期的开发成本。第二章:软件构建的哲学质量的重要性:讨论了软件质量的定义,强调高质量软件不仅包括功能的正确性,还包括可维护性、......
  • 2024.10.2(周三)
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><title>生产工序信息</title><style>/*整体页面布局和样式*/......
  • 2024.10.1(周二)
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><title>生产制令</title><style>/*整体页面布局和样式*/......
  • 2024.10.3(周四)
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><title>质量检验信息</title><style>/*整体页面布局和样式*/......
  • 2024.10.5 笔记
    贪心的证明方法(5个):咕咕咕贪心、DP。贪心优化DP。有简单策略:贪心。无:DP。手玩样例。手玩。兜底。重复:copy。一行多个最小值。不管。得到答案后转成0/1。反悔贪心的一般策略:先把所有都选上,再反悔。IOI那道题和这道题。感觉反悔贪心常用堆。手写堆,支持插入、......
  • 【2024.10.4 闲话】0/99+
    今日推歌:没有。明天可能有。今日set:也没有。话说应该没人知道set是什么吧,总之不是std::set。[ARC176E]MaxVector给你两个长度为\(N\)的正整数序列:\(X=(X_1,X_2,\dots,X_N)\)和\(Y=(Y_1,Y_2,\dots,Y_N)\)。此外,你还得到\(M\)个长度为\(N\)的正整数序列。第\(......
  • 2024.10.4
    mybatis中表字段的映射实体类packagecom.ruoyi.system.handler;importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.ruoyi.system.domain.ProductDetails;importorg.apache.ibatis.type.BaseTyp......