摘要: 题目大意: 求一个字符串中形如AABB的子串个数。 思路: 用哈希做到O(1)判断字符串是否相同,O($n^2$)预处理,ans[i]为开头位置为i的形如AA的子串个数。再用O($n^2$)枚举出AABB中的AA,加上BB(已预处理)的个数即可。时间复杂度为O($n^2$),最后一个点过不掉~~。( 阅读全文
posted @ 2016-08-30 19:54 HHshy 阅读(1166) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 有n个区间,当有m个区间有公共部分时,求m个区间长度的最大值与最小值之差的最小值。 思路: 按区间的长度从小到大排序,可知连续的几个区间最优,则用两个指针指其头尾,线性扫描,再用线段树区间覆盖。 代码: 阅读全文
posted @ 2016-08-30 19:50 HHshy 阅读(995) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定一棵有根树,每个点有一个权值,提供三种操作: 1.将x节点变为根节点 2.将x到y路径上的点的权值全部改为v 3.询问x的子树中点权的最小值 思路: 用DFS序剖分,记录每个节点入栈出栈的时间,其之间的区间即为子树。操作2用线段树直接搞,而换根先不管,可用原来的DFS序。询问时分类讨 阅读全文
posted @ 2016-08-30 19:47 HHshy 阅读(787) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给出一个n个点的树,和m次操作。每个点有颜色和权值。 每次操作分4种 1:修改一个点的颜色 2:修改一个点的权值 3:询问从x到y的路径上,和x相同颜色的点的权值和(保证x,y同颜色) 4:询问从x到y的路径上,和x相同颜色的点的权值最大值(保证x,y同颜色) 思路: 树链剖分,用线段树 阅读全文
posted @ 2016-08-30 19:46 HHshy 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段) 思路: 树剖之后,维护其两端的颜色、答案和标记即可。 代码: 阅读全文
posted @ 2016-08-30 19:44 HHshy 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 有n个软件安装包,除第一个以外,其他的要在另一个安装包的基础上安装,且无环,问在安装和卸载某个软件包时,这个操作实际上会改变多少个软件包的安装状态。 思路: 可构成树,用树链剖分,线段树。已安装的为1,未安装的为0。对于安装操作,就是询问x到0的路径上0的个数,然后把这个路径赋为1;对于 阅读全文
posted @ 2016-08-30 19:41 HHshy 阅读(671) 评论(0) 推荐(1) 编辑
摘要: 题目大意: 有一棵树,最先每条边的权值是1,然后给出n+m-1个操作,操作有两种:1.询问一个点到根的路径上的权值和;2.将一条边的权值改为0. 思路: 用dfs序将树化为序列,在dfs序中我们会保存节点i进入时间come[i]和出去时间leave[i],这两个数之间的区间即为其子树。询问实为前缀和 阅读全文
posted @ 2016-08-30 19:39 HHshy 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反数,3.Q a b c表示询问[a,b]这一段区间中选择c个数相乘的所有方案的和mod 19940417的值。 思路: 显然需要用线段树维护一 阅读全文
posted @ 2016-08-30 19:35 HHshy 阅读(547) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定一棵n个点的树,每个点有一个权值,m个询问,每次询问树上点x到点y的路径上的第k小数。 思路: dfs后给每个节点一个dfs序,以每个点在他父亲的基础上建立主席树,询问时用(点x+点y-点lca(x,y)-点dad[lca(x,y)])即可得到x到y的链,在上面查询即可。 代码: 阅读全文
posted @ 2016-08-30 19:33 HHshy 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 有一个有向无环图,n个点m条边,所有边权为1或2,求一组使所有从1到n的路径长度相同的边权的方案。 思路: 设从1到i的最短路为dist[i],若有一条从x到y的边,则1<=dist[y]-dist[x]<=2,即dist[y]-dist[x]>=1且dist[x]-dist[y]>=- 阅读全文
posted @ 2016-08-30 15:14 HHshy 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 有一些木材,可以没有浪费地将一根木材分成几块木板(比如长度为10的木板可以切成长度为8和2的两块木板)。现在你希望得到一些长度的木板,问通过分割木材最多能得到几块想要的木板。 思路: 首先,长度短的木板一定比长度长的木板容易得到,因此若要得到最多的木板,它们必定是所有木板中最短的——可以 阅读全文
posted @ 2016-08-30 12:22 HHshy 阅读(419) 评论(0) 推荐(0) 编辑