随笔分类 -  线段树小技巧

摘要:Z - New Year Tree CodeForces - 620E 这个题目还没有写,先想想思路,我觉得这个题目应该可以用bitset, 首先这个肯定是用dfs序把这个树转化成线段树,也就是二叉树。 然后就是一个区间修改和区间查询。这个区间查询时查询这个区间的种类数。 这个之前写过几个题目也是查 阅读全文
posted @ 2019-08-21 22:09 EchoZQN 阅读(127) 评论(0) 推荐(0)
摘要:C. Okabe and Boxes 这个题目是一个有点思维的模拟,当时没有想到, 思维就是这个栈的排序这里,因为每次直接排序肯定会t的,所以不可以这么写,那怎么表示排序呢? 就是直接把栈清空,如果栈顶就是我们需要的这个值,那就把这个值直接pop, 但是如果不是呢,就可以直接清空这个栈表示排序,如果 阅读全文
posted @ 2019-08-15 14:44 EchoZQN 阅读(115) 评论(0) 推荐(0)
摘要:这个题目居然可以用线段树写,好震惊,如果不是在线段树专题肯定想不到,但是就算在线段树的专题里面,我也不太会怎么写。 这个题目大意是,给你n m n代表n个点,m代表m条边,然后就是m行,每行两个数字,一个u一个v。 这个意思是u和v不想连,然后问你这个n个点形成了多少个联通块。 思路大概是这样,首先 阅读全文
posted @ 2019-08-12 16:07 EchoZQN 阅读(182) 评论(0) 推荐(0)
摘要:A Simple Problem with Integers 这个题目首先要打表找规律,这个对2018取模最后都会进入一个循环节,这个循环节的打表要用到龟兔赛跑。 龟兔赛跑算法 floyed判环算法 这个算法我觉得还是很有意思的,可以学习一下。 不过这个题目这个算法打表还是有点难写的。 由这个算法可 阅读全文
posted @ 2019-08-08 20:07 EchoZQN 阅读(193) 评论(0) 推荐(0)
摘要:这个题目一开始感觉还是有点难的,这个模数这么大,根本就不知道怎么写,然后去搜了题解,知道了怎么去求当x很大的时候x的平方对一个数取模怎么样不会爆掉。 然后还顺便发现了一个规律就是当一个数更新一定次数之后就不会变化了。 然后这个题目就很好写了,就是一个区间求和和一个区间修改。现在还不确定如果不加一个找 阅读全文
posted @ 2019-08-04 10:22 EchoZQN 阅读(245) 评论(0) 推荐(0)
摘要:V - Can you answer these queries? HDU - 4027 这个题目开始没什么思路,因为不知道要怎么去区间更新这个开根号。 然后稍微看了一下题解,因为每一个数开根号最多开十几次就变成1了,所以就直接单点更新,但是这个可以剪枝。 如果碰到区间长度和区间大小相同就可以不用更 阅读全文
posted @ 2019-07-31 14:26 EchoZQN 阅读(124) 评论(0) 推荐(0)
摘要:S - Query on a tree HDU - 3804 离散化+权值线段树 题目大意:给你一棵树,让你求这棵树上询问的点到根节点直接最大小于等于val的长度。 这个题目和之前写的那个给你一棵树询问这棵树的这个节点到根节点之间的节点权重相乘小于等于k的对数非常像。 之前是不是就是放进去弹出来的操 阅读全文
posted @ 2019-07-29 14:23 EchoZQN 阅读(202) 评论(0) 推荐(0)
摘要:R - Weak Pair HDU - 5877 离散化+权值线段树 这个题目的初步想法,首先用dfs序建一颗树,然后判断对于每一个节点进行遍历,判断他的子节点和他相乘是不是小于等于k, 这么暴力的算法很自然的超时了。 然后上网搜了一下题解,感觉想的很巧妙。 就是我们要搜 子节点和父节点的乘积小于一 阅读全文
posted @ 2019-07-27 10:47 EchoZQN 阅读(168) 评论(0) 推荐(0)
摘要:Q - Play With Sequence HDU - 3971 这个题目是一个线段树,比较特别的线段树,就是c询问一定次数之后重新排序建树来优化减低复杂度。 第一次碰到这种题目有点迷。 这个题目写还是很好写的,就是重新排序建树的位置不太好找。 不过可以知道的是,这是更新花费时间和排序花费时间的一 阅读全文
posted @ 2019-07-26 11:55 EchoZQN 阅读(131) 评论(0) 推荐(0)
摘要:E. A Simple Task 这个题目的意思是 给你一个由小写字母组成的字符串,有两种操作 i j k 如果k==1 那么就是就把i 到 j 的这个区间非递减排序。 i j k如果k==2 那么就是把 i 到 j 这个区间非递增排序。 n 有 1e5 q(操作次数) 5e4 这个题目不会写,问别 阅读全文
posted @ 2019-07-25 15:35 EchoZQN 阅读(202) 评论(0) 推荐(0)
摘要:这个是要用bitset 一个大整数的二进制 学习推荐博客 这个题目大意就是:给你n,m 还有一个序列,还有一个一棵树,有一种操作一种询问 操作是给你一个节点 把这个节点及其子节点都加上x 询问是 给你一个节点,问你这个节点以下 小于m的质数有多少种,注意是种,所以要去重,所以需要bitset 这个题 阅读全文
posted @ 2019-07-24 17:01 EchoZQN 阅读(156) 评论(0) 推荐(0)
摘要:题目一:E. Infinite Inversions 这个题目没什么思维量,还比较简单,就是离散化要加上每一个值的后面一个值,然后每一个值放进去的不是1 ,而是这个值与下一个点的差值。 因为这个数代表了一堆数,然后每一次的找到了的逆序对都要乘以这个num。 #include <cstdio> #in 阅读全文
posted @ 2019-07-17 21:58 EchoZQN 阅读(144) 评论(0) 推荐(0)
摘要:牛客小白月赛16 这个题目我AC之后看了一下别人的题解,基本上都是线段树,不过二分也可以。 这个题目很自然就肯定要对其中一个进行排序,排完序之后再处理另外一边,另一边记得离散化。 怎么处理呢,你仔细想想,找找规律就可以发现,其实我们就是在找递增子序列。 第一次找到的就是重要程度为1 的妹子,然后删除 阅读全文
posted @ 2019-07-17 14:56 EchoZQN 阅读(121) 评论(0) 推荐(0)
摘要:Minimum Inversion Number HDU - 1394 求最小反转数,就是求最少的逆序对。 逆序对怎么求,就是先把所有的数都初始化为0,然后按照顺序放入数字,放入数字前查询从这个数往后面的数的位置是不是被占了,被占了说明有逆序对。 #include <stdio.h> #includ 阅读全文
posted @ 2019-07-17 11:32 EchoZQN 阅读(114) 评论(0) 推荐(0)
摘要:G - Mayor's posters POJ - 2528 这个题目要倒着来写,从后面往前面贴,因为前面的有些会被后面的覆盖。 所以我们就判断这张海报的位置有没有完全被覆盖,如果完全被覆盖了就不能贴,但是没有完全被覆盖就可以贴上去,然后更新掉这一段。 #include <cstdio> #incl 阅读全文
posted @ 2019-05-09 20:37 EchoZQN 阅读(203) 评论(0) 推荐(0)