P3521 [POI2011]ROT-Tree Rotations 题意:递归给出给一棵\(n(1≤n≤200000)\)个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少. 大体给出方式: 第一行一个正整数\(n\),表示该二叉树的叶节点的个数: 下面若干行,每行一个数\(p\): 如果\(p=0\),表示这个节点不是叶节点,递归地向下读入其左孩子和右孩子的信息: 如果\(p \neq 0\) ,表示这个节点是叶节点,权值为\(p\) . 本来想学一下启发式合并的,结果被一…
给定一棵二叉树,叶子节点有权值,可以进行若干次交换一个节点的左右儿子的操作,使前序遍历叶子的逆序对最少. 考虑一个节点下子树逆序对的产生: ① 只在左子树中产生. ② 只在右子树中产生. ③ 在左子树和右子树中交叉产生. 因为二叉树的性质,所以 ① ② 两种情况只需递归下去求解,只需考虑情况 ③ . 用权值线段树来记录信息,通过线段树合并来统计答案. 具体实现细节看代码吧. 记得开\(long\ long\). \(code:\) #include<bits/stdc++.h> #define…
题目大意:给一棵$n(n\leqslant2\times10^5)$个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少.输出最少的逆序对个数 题解:线段树合并,对于每个节点求出交换左右子树和不交换的答案. 卡点:没开$long\;long$ C++ Code: #include <cstdio> #define maxn 200010 #define N maxn * 20 inline long long min(long long a, long long b) {re…
题目传送门 Tree Rotation 题目描述 Byteasar the gardener is growing a rare tree called Rotatus Informatikus. It has some interesting features: The tree consists of straight branches, bifurcations and leaves. The trunk stemming from the ground is also a branch.…
洛谷P3513 [POI2011]KON-Conspiracy 题目描述 Byteotia的领土被占领了,国王Byteasar正在打算组织秘密抵抗运动. 国王需要选一些人来进行这场运动,而这些人被分为两部分:一部分成为同谋者活动在被占领区域,另一部分是后勤组织在未被占领的领土上运转. 但是这里出现了一个问题: 1.后勤组织里的任意两人都必须是熟人,以促进合作和提高工作效率. 2.同谋者的团体中任意两人都不能是熟人. 3.每一部分都至少要有一个人.国王想知道有多少种分配方案满足以上条件,当然也有可…
BZOJ原题链接 洛谷原题链接 线段树合并裸题. 因为交换子树只会对子树内部的逆序对产生影响,所以我们计算交换前的逆序对个数和交换后的个数,取\(\min\)即可. 对每个叶子节点建一棵动态开点线段树,然后向上合并并更新答案. 而逆序对可以在线段树合并的过程中算出来,因为是权值线段树,根据\(mid\)计算贡献即可. 这题洛谷和\(BZOJ\)不卡常,而\(LOJ\)丧心病狂地把每个点开到\(160ms\),我这份代码需要改成超级快读才能卡过.. #include<cstdio> using…
洛谷题目链接:[POI2011]MET-Meteors 题意翻译 Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下陨石雨.BIU已经预测了接下来K场陨石雨的情况. BIU的第i个成员国希望能够收集Pi单位的陨石样本.你的任务是判断对于每个国家,它需要在第几次陨石雨之后,才能收集足够的陨石. 输入: 第一行是两个数N,M. 第二行有M个数,第i个数Oi表…
\(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师)的掌握程度 考完试有人说这题是马拉车,吓死我了 首先,你把数据读入之后,先用一个大法师把以每个节点为根的子树的大小和权值都预处理出来,方便待会剪枝 然后,你对以每个节点为根的子树,都判断一下以下条件(这时刚才处理的东西就有用了) ① 左子树和右子树的节点数是否相等 ② 左子树和右子树的权值是否相等…
根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种是通过分成 多块后在每块上打标记以实现快速区间修改,区间查询的一种算法.根号 分治与其思路相似,将原本若一次性解决时间复杂度很高的问题分块去解 决来降低整体的时间复杂度. 例题 以本题举例子哈希冲突 本题作为论文的第一道题目,是一道很好的练习题,注意,本体给出的 \(value[i]\) 是 \(i…
题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 LCP 长度数组 \(p\). 数据范围:\(1\le |a|,|b|\le 2\times 10^7\). 蒟蒻语 别的题解为什么代码那么长.讲解那么复杂?蒟蒻不解,写篇易懂一点的,希望没有错误理解. 注意:蒟蒻的下标是从 \(0\) 开始的. 蒟蒻解 定义 \(z(i) (i>0)\):后缀 \(…
题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \(\max_{k=l_i}^{r_i}h_k=g_i\).求满足条件的 \(h_i\) 的方案数膜 \(998244353\). 数据范围:\(1\le T\le 20\),\(1\le l_i\le r_i\le n\le 9\cdot 10^8\),\(1\le g_i\le A\le 9\cdo…
洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积的讲解. 三位向量的运算 模长: 即向量长度,\(|\vec{a}|=\sqrt{x_a^2+y_a^2+z_a^2}\). 点积: 标量 \(\vec{a}\cdot\vec{b}=|\vec{a}||\vec{b}|\cos<\vec{a},\vec{b}>=x_ax_b+y_ay_b+z_a…
洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) 互不相等.将糖果和药片一一对应,求 糖果能量大于药片 比 药片能量大于糖果 多 \(k\) 组的方案数. 数据范围:\(1\le n\le 2000\),\(0\le k\le n\). 萌新初学二项式反演,这是第一道完全自己做出来的题,所以写篇题解庆祝并提升理解. 有 \(\frac{n+k}{2…
洛谷P5217 贫穷 给定长度为 \(n\) 的初始文本 \(s\),有 \(m\) 个如下操作: \(\texttt{I x c}\),在第 \(x\) 个字母后面插入一个 \(c\). \(\texttt{D x}\),删除第 \(x\) 个字母. \(\texttt{R x y}\),反转当前文本中的区间 \([x,y]\). \(\texttt{P x}\),输出初始文本中第 \(x\) 个字母在当前文本中的位置.特别地,若不存在,输出 \(0\). \(\texttt{T x}\),输…
洛谷题目传送门 关于LCT的其它问题可以参考一下我的LCT总结 一道LCT很好的练习放懒标记技巧的题目. 一开始看到又做加法又做乘法的时候我是有点mengbi的. 然后我想起了模板线段树2......(相信各位Dalao一定做过这道题) 这里的维护懒标记方法很像.除了翻转标记以外还要维护乘法标记和加法标记. 根据运算优先级,乘法是要先算的,所以先放,放的时候子树的\(sum\),乘法标记,加法标记,儿子的\(val\)统统都要乘一遍. 放加法标记的时候,想到线段树的区间大小是稳定的,而Splay…
洛谷题目传送门 疯狂%%%几个月前就秒了此题的Tyher巨佬 借着这题总结一下决策单调性优化DP吧.蒟蒻觉得用数形结合的思想能够轻松地理解它. 首先,题目要我们求所有的\(p_i\),那么把式子变一下 \[p_i\ge a_j-a_i+\sqrt{|i-j|}\] \[p_i=\max\limits_{j=1}^n\{a_j+\sqrt{|i-j|}\}-a_i\] 绝对值看着很不爽,我们把它拆开 \[p_i=\max(\max_{j=1}^i\{a_j+\sqrt{i-j}\},\max_{j…
By:Soroak 洛谷博客 知识点:模拟+暴力枚举 思路:题目中有提到闰年然后很多人就认为,闰年是需要判断的其实,含有2月29号的回文串,前四位是一个闰年那么我们就可以直接进行暴力枚举 一些小细节:1.需要判断它的月份是否超出122.每一个月份的日期可能不同3.闰年不需要判断,只需要把每年的2月都看为是29天就可以4.判断月份的时候,一定要%1000/100去判断,不然会出现1月和11月一样,10月被直接扔掉,2月和12月一样的情况(我就是这样得了60分).. #include<iostrea…
本文搬自本人洛谷博客 题目 本文进行了一定的更新 优化了 Markdown 中 Latex 语句的运用,加强了可读性 补充了"我们仍不曾知晓得 消失的 性质5 ",加强了推导的严谨性 介于使用了新的推导方法,调整了推导顺序 补充了关于线性筛的欧拉函数性质8 又又又又又 修改了部分错误(工程量太大,老是出错) 安利了 3b1b 的链接,虽然与本文章无关,但对我们的思维提升很有利 将欧拉函数的定义正确修改 减少了 \(ans(n)\) 推导公式的争议性,加强了推导过程的严谨性 更新了 py…
原题:洛谷P2959 不得不说这道题的图有点吓人,但实际上很多都没有用 通过题上说的“三岔路口”(对于每一个节点有三条连接,其中一条连接父节点,另外两条连接子节点)和数据,可以那些乱七八糟的路和牧场看成是一棵二叉树,又因为 “对任意一个节点来说,只有一条从节点1开始的路径可以到达” ,所以可以把1作为根节点.从而将题目转化为求一棵以1为节点的二叉树的深度. 核心算法:DFS 注意: 1.根节点的深度在此题中应该为1(节点1的实际意义是一个要算入答案的一个牧场) 2.有n个节点,他们之间的连接数应…
原题:洛谷P1562 这个题的原理和8皇后的原理是一模一样的,就是必须要用n个皇后把每一个行填满,同时满足每一列,每一行,每一条对角线只有一个棋子.但如果按照原来的方法暴打的话只有60分(优化亲测无效) 所以这个时候,我们可以用二进制来表示一波状态(可以类比状态压缩的二进制).从上面的条件来看,我们需要表示的量有:行.列.两条对角线(向左的和向右的),我们用一个状态的某一位的1表示这个状态的这个位置不能放(已经有棋子) 对于每一行: 我们可以用DFS的深度来减少需要表示状态.(也就是说不用管,见…
题面 洛谷P7114 字符串匹配 \(T\) 组测试数据.给定字符串 \(S\),问有多少不同的非空字符串 \(A\),\(B\),\(C\) 满足 \(S=ABABAB...ABC\) 且 \(A\) 中出现奇数次的字符数不多于 \(C\). 数据范围:\(1\le T\le 5\),\(1\le |S|\le 2^{20}\). 这估计是我场上唯一做出来的题目了,NOIP2020 游记 也不放洛谷博客里了. 提供一个 \(\Theta(n)\) 的做法,下标从 \(0\) 开始. 求出 \(…
题面 洛谷P6788 「EZEC-3」四月樱花 给定 \(n,p\),求: \[ans=\left(\prod_{x=1}^n\prod_{y|x}\frac{y^{d(y)}}{\prod_{z|y}(z+1)^2}\right)\bmod p \] 数据范围:\(1\le n\le 2.5\cdot 10^9\),\(9.9\cdot 10^8<p<1.1\cdot 10^9\). 蒟蒻语 一道题撑起一场月赛,良心又劲爆. 膜拜出题人 @SOSCHINA,@muxii. 蒟蒻解 开局一波猛…
DP康复训练题 原题:洛谷P1990 核心:递推/DP 题源应该是铺地砖,所以采用一摸一样的思路,只是有两种不同的方块 我们先用最最简单的方式尝试一下枚举当最后一行被填满的情况: 1.如果我们只用第一种长方形的方块让最后一行填满,那就只有两种情况: A.最后一列刚好是一个竖着的砖头: B.最后两列都是横着的砖头: 那这个时候我们先定义一个数组F,F的意思取fill,F[i]表示刚好把第i列填满时有多少种方法. 这样的话,因为我们现在只用了第一种方块,所以只可以得出一部分递推公式:F[x]=F[x…
正解:线段树合并 解题报告: 传送门! 今天学了下线段树合并,,,感觉线段树相关的应用什么的还是挺有趣的,今天晚上可能会整理一下QAQ? 然后直接看这道题 现在考虑对一个节点nw,现在已经分别处理出它的ls和rs的最少逆序对个数了,然后现在考虑要不要交换呢QAQ 显然不管nw节点的左右子树内部是怎么排列的,他们整体对外部的贡献是不变的,所以我们只要考虑内部的逆序对个数怎么样尽量小QAQ 这里就可以考虑对每个节点分别开一个权值线段树,然后逆序对的话可以直接在merge的时候做,树状数组都能有的功能…
Link-Cut-Tree 的懒标记下传正确食用方法. 我们来逐步分析每一个操作. 1:+ u v c:将u到v的路径上的点的权值都加上自然数c; 解决方法: 很显然,我们可以 split(u,v) 来提取u,v这一段区间,提取完了将 Splay(v),然后直接在v上打加法标记add即可. 代码: inline void pushadd(ll x,ll val){//打标记 s[x]+=sz[x]*val,v[x]+=val,add[x]+=val; s[x]%=MOD,v[x]%=MOD,ad…
思路: 首先先将每个输入的数据与n的最大公约数求出(因为如果a[i]是密码,那么所有a[i]与n最大公约数的倍数也是密码:于是如果a[i]不是密码,那么所有a[i]与n最大公约数的倍数也都不是密码)再从1到sqrt(a[k])(其实1到a[k]也行)找,最小且符合条件就是最小密码. #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cma…
Link Cut Tree 刚开始写了个指针版..调了一天然后放弃了.. 最后还是学了黄学长的板子!! #include <bits/stdc++.h> #define INF 0x3f3f3f3f #define full(a, b) memset(a, b, sizeof a) using namespace std; typedef long long ll; inline int lowbit(int x){ return x & (-x); } inline int read…
可以说是数据结构学傻了的典型案例了 昨天跳到这题上 然后思考了一下 噫!好!线段树裸题 然后打完板子,发现\(  n \le 10^9 \) 显然线段树直接做不太行 然后这题又只有普及的难度 然后我就打了神奇的动态开点线段树水过 qwq 之后看题解发现正解是\( O(m^2) \)的暴力 因为常数小跑的更快啊qwq #include <cstdio> #include <algorithm> #include <cstring> #define int long lon…
题面 题目背景 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该数字被去掉并累加到本玩家的得分中,当数取尽时,游戏结束.以最终得分多者为胜. 题目描述 编一个执行最优策略的程序,最优策略就是使玩家在与最好的对手对弈时,能得到的在当前情况下最大的可能的总分的策略.你的程序要始终为第二位玩家执行最优策略. 输入输出格式 输入格式: 第一行: 正整数N, 表示序列中正整数的个数. 第二行至末尾: 用空格…
题面 题目背景 John的农场缺水了!!! 题目描述 Farmer John has decided to bring water to his N (1 <= N <= 300) pastures which are conveniently numbered 1..N. He may bring water to a pasture either by building a well in that pasture or connecting the pasture via a pipe…