摘要:
前四题水。 G 时限五秒,两只 log 都能过。 建线段树,每个结点上面存一个 multiset,包含所有作用到这个结点区间上的修改。 删除直接找到对应 multiset 删除即可。 阅读全文
摘要:
左偏树是一种可并堆(一系列的堆),支持以下操作: 删除一个堆的最值。 查询一个堆的最值。 新建一个堆,只包含一个元素。 合并两个堆。这个复杂度是 \(O(\log)\) 的。 左偏树是一颗二叉树。定义 “外结点” 为儿子数量不等于 \(2\) 的结点,定义每个结点的 \(dist\) 为该结点到最近 阅读全文
摘要:
只做了 A,成功被 sb 错误卡住。 A 每次挑最右边的左移。 B 每次一定是优先向最近的怪物打,打完一个打下一个最近的。 子弹不一定只能打两个怪物,所以打的时候用循环判断子弹是否打完。 C l = r 不行 否则考虑全 1 再把所有 \(c_i=1\) 的都 +1,这需要 \(cnt1[r]-cn 阅读全文
摘要:
CF10E 题解 翻转 性质:如果翻转的区间所有数对个数为偶,则整个逆序对个数奇偶性不变;否则改变。 证明:首先翻转区间外的逆序对个数不会变化,翻转区间与翻转区间外的逆序对个数也不会变化。 假设翻转前翻转区间内有 \(cnt\) 个逆序对,则翻转后有 \(len\times (len-1)/2-cn 阅读全文
摘要:
无向基环树找环,遍历模板: #include <bits/stdc++.h> using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f; int n; vector<int> e[500005]; bool vis[5 阅读全文
摘要:
【根号分治】 例题:等差数列加 给定一个长度 \(n\) 的数列,初始全都是 0。(\(n\leq 2\times 10^5\)) 要求支持两种操作: \(1\;x\;y\;d\),表示把所有下标模 \(x\) 等于 \(y\) 的位置全部加上 \(d\); \(2\;x\),表示查询 \(a_x\ 阅读全文
摘要:
一道练习贪心证明的好题。 绝大多数题解只是点出了以下结论: 要么最快的带最慢的;要么最慢的带次慢的。 并没有给出证明。我就补上这个证明。 为了证明这个贪心结论,我们先证明几个引理。 引理一:每次将火把带回来的,一定是对岸最快的。 引理一证明:如果回来的不是对岸最快的,让对岸最快的人代替这个回来的人的 阅读全文
摘要:
自己做不出来,看现在题解区的题解讲的都不咋清楚。懂了之后来为后人铺路。而且我的马蜂比较好看 题目传送门 我能看懂这道题,主要是依靠了这篇题解的帮助。 首先我们只关注数的相对关系,所以可以离散化。注意到值域 \(10^6\),用数组离散化。 这道题可以用贪心做。(有一些定义先往下看) 定义一个无缝子序 阅读全文
摘要:
传送门 注意题目保证新加入的区间长度一定最大,想一想,这是保证了新区间不会被包含。 区间关系有三种:如果两个区间相交,则两个区间互相可达;如果是包含关系,小的能到大的;如果相离,都不能到。 显然当区间 \(a\) 与 \(b\) 相互可达,\(b\) 与 \(c\) 相互可达,则 \(a,b,c\) 阅读全文
摘要:
传送门 先将括号序列建树。 具体而言,假设当前根结点为 \(rt\),当前括号序列为 \(s\)。若 \(s\) 能分成 \(cnt\) 组括号,则 \(rt\) 有 \(cnt\) 个儿子。对于第 \(i\) 个儿子,以它为新根结点,第 \(i\) 组括号为新括号序列,递归建树。 例如 (()() 阅读全文