首页 > TAG信息列表 > HEOI2016
[HEOI2016/TJOI2016]字符串 题解
SA+二分+主席树 Statement \(q\) 次询问 \(s[a\dots b]\) 的所有子串和 \(s[c\dots d]\) 的最长公共前缀最大值 \(n,q\le 10^5\) Solution 其实感觉算不上黑题 看到 LCP,容易想到 SA,管都不管,先套一个 SA SA 套路二分答案,然后把 height 数组分组 设 \(l=\min\{i|height[i]>=mid\},r=[HEOI2016/TJOI2016]求和
题意 :设 \(S\) 是第二类斯特林数, 求 \(\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{i}S(i,j) \times 2^j \times j!\) 因为有 \(m^n =\sum\limits_{i=0}^{m}\dbinom m i i! \times S(n, i)\) 设 \(f(x) = x^n\), \(g(x) = x! \times S(n, x)\), 根据二项式反演 : \(f(m) = \su[HEOI2016/TJOI2016]序列(CDQ分治优化DP)
洛谷题目传送门 解题思路 题目和最长上升子序列比较像,我们考虑用\(dp\)来解决 设\(f_i\)表示以\(i\)这个位置结束的最长序列的长度,\(Max_i\)表示\(i\)这个位置最大的数,\(Min_i\)表示\(i\)这个位置最小的数,转移时枚举上一个选的元素\(j\)是哪个位置 因为最多只会变一个数,所以对于一[HEOI2016/TJOI2016]序列(cdq优化dp)
给定一个序列 \(a\) 和若干对整数 \(x,y\),表示在一次变化中, \(a_x \gets y\)。这次变化结束后,\(a\)复原。试选出一个子序列,使其在任意一次变化中都满足单调不降。 LIS 问题作为 dp 入门题十分熟悉,即 \(f_i=\max\{f_j\}+1\),要求 \(j\) 满足 \(j<i,a_j\le a_i\)。这道题实际上是增加HEOI2016 序列
题意: 最长上升子序列,不过是永久最长上升子序列而且每次变化只能改一个值,也就是说对于 i 和 j,i 处所有值都要小于等于 j 处,j 处所有值都要大于等于 i 处才可以。 50pts 做法 根据题意,我们易得基础 DP: $$f_i=\max(f_i,f_j+1)$$ 条件: $maxx_j \leq a_i$ $minn_i \leq a_j$ $1 \leq j[HEOI2016/TJOI2016]字符串
好神。 考虑到我们二分答案。 那么我们要做的是这样一个事情: 判定s[c,d - l]在s[a,b]是否以子串形式出现过。 那这是一个\(SAM\)的很套路的题目: 我们考虑到我们维护每个endpos集合的出现的子串,这个我们在\(link\)树上做线段树合并即可。 我们从表示\(s[1,b]\)的SAM节点倍增往上【题解】[HEOI2016/TJOI2016]字符串
[HEOI2016/TJOI2016]字符串 \(\text{Solution:}\) 记录一下这题获得的启发。 最长公共前缀/后缀一类问题,具有可二分性。 考虑二分一个答案,然后看如何检验。 如果答案是 \(mid,\) 那么对应的串应该就是 \(s[c\cdots c+mid-1],\) 我们发现:它是前缀 \(s[1\cdots c+mid-1]\) 的后缀[HEOI2016/TJOI2016]游戏
二分图的题 可以分别以行列和列行建 1.二分图 #include<bits/stdc++.h> using namespace std; const int N=555; int n,m; char c[N][N]; int a[N][N],b[N][N]; int flag[N<<5],match[N<<5]; int head[N<<5],nxt[N<<6],to[N<<6]; long long ans; int「TJOI / HEOI2016」求和
第二类斯特林数的通项公式: \[S(n,k) = \frac {\sum_{i=0}^k (-1)^i*\binom{k}{i}*(k-i)^n}{k!} \] 带入原式可得: \[\sum_{i = 0}^n\sum_{j = 0}^n S(i,j)*2^j*j!\\= \sum_{i= 0}^n\sum_{j =0}^n 2^j*j!\frac {\sum_{k=0}^j (-1)^k*\binom{j}{k}*(j-k)^i}{j!}\\= \sum_{j=0}^「HEOI2016/TJOI2016」排序
「HEOI2016/TJOI2016」排序 题目大意 给定一个 \(1\) 到 \(n\) 的排列,每次可以对这个序列的一个区间进行升序/降序排序,求所有操作后第 \(q\) 个位置上的数字。 题解 大棒子,又学到了许多。 做法很多,这里大概讲一下主流的几种做法。 在线做法 线段树合并&分裂 其实将一个区间升序! TJOI/HEOI2016字符串
\(nm1e5\) 求a-b的后缀与c后缀的最长公共前缀 二分长度,这样可以锁定a-b可行的区间 然后再二分rk区间,哪些可行 区间内查存在性,主席树 代码较繁琐,还没写! TJOI/HEOI2016排序
只用询问一个地方的值,考虑二分,把大于mid的全变1,否则为0,这样就变成01序列排序,一次\(log\),用线段树辅助,时间复杂度\(O(nlog^2n)\) 线段树分裂 类似非旋treap 建立权值线段树,把有序的用用一个线段树表示,并把所有线段树初始节点插入set,每次修改就把修改区间split出来,记录其排序方式排序[HEOI2016/TJOI2016]
【题目描述】 在 \(2016\) 年,佳媛姐姐喜欢上了数字序列。因而她经常研究关于序列的一些奇奇怪怪的问题,现在她在研究一个难题,需要你来帮助她。 这个难题是这样子的:给出一个 \(1\) 到 \(n\) 的排列,现在对这个排列序列进行 \(m\) 次局部排序,排序分为两种: 0 l r 表示将区间 \([l,r]\)BZOJ 4555: [Tjoi2016&Heoi2016]求和
好久之前做的题了,算是我的NTT入门题了,然后我点开题单里的多项式,除了这题全TM是权限题当场去世 废话不多说直接推式子: \[ ans=\sum_{i=0}^n\sum_{j=0}^i \left\{_j^i\right\}\times 2^j\times j!\\=\sum_{i=0}^n\sum_{j=0}^n \left\{_j^i\right\}\times 2^j\times j!\\=\sum_{j=0}^dtoi4537 「TJOI / HEOI2016」树
题意: 有一棵树,每次两种操作,给一个点打上标记或者询问一个点最近的一个打了标记的祖先(包括自己),一开始只有根节点有标记 题解: 本题方法较多,这里采用一种最简单的做法。 先将树转化成dfs序,每一次打标记操作相当于在自己的子树上覆盖一个值,这个值也就是自己的P4094 [HEOI2016/TJOI2016]字符串
题意 考虑二分答案\(mid\),现在我们要判断\(s[c...c+mid-1]\)是否在\(s[a...b]\)出现过。 首先找到\(s[c...c+mid-1]\)所在的状态: 建出\(parent\ tree\),从\(s[1...c+mid-1]\)的节点(这个可以记录)用倍增向上跳到最后一个\(len\geqslant mid\)的节点即可,记这个节点为\(now\)。 之后我[HEOI2016/TJOI2016]树
洛咕 题意:解决这样一个问题:给定一颗有根树,根为 \(1\) ,有以下两种操作: 1. 标记操作:对某个结点打上标记.(在最开始,只有结点 \(1\) 有标记,其他结点均无标记,而且对于某个结点,可以打多次标记.) 2. 询问操作:询问某个结点最近的一个打了标记的祖先.(这个结点本身也算自己的祖先).\(n,m<=1000[HEOI2016/TJOI2016] 求和
有关斯特林数的介绍和斯特林反演:斯特林数及斯特林反演。 本来是想做容斥的,结果发现了一个多项式题目…… 不过容斥和反演息息相关嘛。 这题做完之后感觉卷积也不是那么难,就把它理解成一个预处理一个复杂函数的方法就好了。这样复杂度可以从 \(O(n)\) 求和式变成 \(O(1)\) 取得函数P2825 [HEOI2016/TJOI2016]游戏
题目描述 详见 P2825 [HEOI2016/TJOI2016]游戏。 solution 套路题。 一般思路是行列建点跑二分图最大匹配。 此题中的#会分隔行列,因此我们把每行的极大联通块设为点,列同理建点。 再对于每个*对应的行的极大联通块与列的最大联通块编号连边,跑最大匹配即可。 #include<bits[BZOJ4553][HEOI2016/TJOI2016]序列
传送门 好像是DP再套个裸的CDQ? 树套树是不可能写树套树的,这辈子都不可能写树套树的 对于一个 \(i\) ,设它最小为 \(a_i\) ,原数为 \(b_i\) ,最大为 \(c_i\) \(f_i\) 表示 \(i\) 结尾的最长子序列, \(f_i=f_j+1\) , \(j\) 要满足 \(j<i\) \(c_j \leq b_i\) \(b_j \leq a_i\) 这不就CDQP2824 [HEOI2016/TJOI2016]排序
题目:P2824 [HEOI2016/TJOI2016]排序 思路: 线段树专题讲的。 讲过不只一次了,方法挺巧妙的。 这道题并不是真的需要使用线段树来做排序。 • 考虑这道题的特殊性质,发现我们只需要求最后一个元素的大小。 • 由于是全排列,我们可以直接二分答案x,将排列中大于等于x的标记为1,小于x的元素[Tjoi2016&Heoi2016] 序列 CDQ分治
题意: 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他。玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一个值发生变化。 现在佳媛姐姐已经研究出了所有变化的可能性,她想请教你,能否选出一个子序列,使得在任意一种变化中,这个子序列都是不降的?请你[HEOI2016/TJOI2016]树
来一发大暴力 树链剖分无疑了 对于某个询问节点,二分答案所在的深度,若该深度到该节点上的区间和>0,说明其中有满足条件的点,增加深度继续二分,否则减小深度 线段树上的操作:单点修改+区间查询(区间和) 关于时间: 时间复杂度\(O(nlog^{2}n)\) 虽然不是最优解法,但能过了,稍微卡一下,总时间大P4091 [HEOI2016/TJOI2016]求和
首先,我们需要知道第二类斯特林数组的组合意义(即容斥) $S^m_n = \frac{1}{m!} \sum_{k = 0}^{m}(-1)^kC^k_m(m - k)^n$ 然后,题目中让我们求 $f(n) = \sum_{i = 0}^n\sum_{j = i}^nS^j_i2^jj!$ 我们直接将$S^j_i$展开成上述的组合意义,同时$j$从$0$开始枚举(因为当$m > n$时,$S^m_nP4093 [HEOI2016/TJOI2016]序列
题目链接 题意分析 我们假设每一个数都有一个变动范围\([L_i,R_i]\) 那么我们令\(dp[i]\)表示以\(i\)结尾的最长不下降子序列的长度 那么就是\(dp[i]=max\{dp[j]+1\}\) 转移的条件是 \(1.j<i\) \(2.r_j≤a_i\) \(3.a_j≤l_i\) 所以这就是一个三位偏序问题了 同时需要注意的是 我们