摘要: 给你一棵树,每次修改一个子树的所有值,然后单点查询。 按照DFS序把节点排列(即在DFS中出现的先后次序),同一个子树在序列中连续。 1 #include <cstdio> 2 using namespace std; 3 typedef long long ll; 4 int n,q,T,Tc,c 阅读全文
posted @ 2020-01-13 22:20 IAT14 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 给你一个01序列,每次将一个位置变成0或1。问某个位置所在的最长1串多长。 我们维护vec[k],k所代表序列中的最长子串长度,ls[k],k所代表序列中的最长前缀,rs[k],k所代表序列中的最长后缀。 合并很简单,vec[k] = max(vec[k << 1],vec[k << 1 | 1], 阅读全文
posted @ 2020-01-13 21:43 IAT14 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 区间开根,区间求和。 最大的int开不到10次根也会变成1。每次开根都暴力处理,最多也不过是10N的复杂度。 所以每个节点维护一个标记,子树所代表的区间是否都小于等于1,成立就不开根了,从而维护复杂度正确性。 注意输入的l和r可能先大后小,需要交换.... 跟BZOJ花神游历各国是一个题。 1 #i 阅读全文
posted @ 2020-01-13 19:27 IAT14 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 正常区间修改,然后最后一起暴力查一遍就行了。 区间修改有0,需要用-1做lzy标记.... 1 #include <cstdio> 2 #include <map> 3 #include <algorithm> 4 using namespace std; 5 int col[40000],lzy[ 阅读全文
posted @ 2020-01-13 18:58 IAT14 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 给一个1e7的白板,然后有1e5次操作,每次选一段区间,涂上颜色i(会覆盖之前的)。问最后一共可以看到几个颜色。 首先1e7线段树开不下,操作只有1e5,我们考虑离散化。 但是普通离散化不行。比如[1,4] [1,2],[4,4]离散化后为[1,3][1,2],[3,3]。原先第一段没被覆盖,但是离 阅读全文
posted @ 2020-01-13 16:53 IAT14 阅读(119) 评论(0) 推荐(0) 编辑