随笔分类 -  数据结构

摘要:t题意略。 思路:(本题居然被人当成贪心,我真是醉了) 本题如若采用在线应答,则会很费时间。因此采用离线算法来解决。 这里又是区间查询,当然是采用莫队来解决了。 首先,在一个区间中,如果要使所有人的运转时间总和最小,肯定要让数字从小到大来排列。 在一个从小到大排列的数列中(有n项),如果我们插入一个 阅读全文
posted @ 2019-09-12 01:34 温和的提比略 阅读(174) 评论(0) 推荐(0)
摘要:题意略。 思路: 仔细思考这个题目会发现,它其实是要你查询两次,第一是要规定l,r的范围,第二是要在范围内查询小于等于H的个数。所以有的人说要用主席树。 现在,如果我们能省去范围内对h的查询呢?也就是说,在查询范围时,我们就要保证这个范围内的所有hi都小于等于H的数字。 我们可以离线地来做。这样就只 阅读全文
posted @ 2018-08-02 20:47 温和的提比略 阅读(110) 评论(0) 推荐(0)
摘要:题意略。 思路: 将树上的节点编好dfs序,然后就可以用树状数组区间修改点查询了。 我们用 lft[v] 和 rht[v]来表示v的子树在dfs序中的左端和右端,这样才方便我们对树状数组的操作。 其实这个题目的问题在于每个点在修改时,修改的值不是一定的,会发生变化。 我是将加上的值和减去的值分开了。 阅读全文
posted @ 2018-08-02 19:50 温和的提比略 阅读(212) 评论(0) 推荐(0)
摘要:这种算法能够解决关于询问一棵树的子树的相关信息的问题。 算法的流程大概是这样: 1、dfs将一棵树建好,将节点的size、dfs序、重儿子、该dfs序对应的节点这些信息处理好(其他的信息具体问题具体分析)。 2、进入solve函数,先去解决非重儿子,然后将这些非重儿子的信息暴力清空。 3、接下来解决 阅读全文
posted @ 2018-07-31 10:51 温和的提比略 阅读(123) 评论(0) 推荐(0)
摘要:题意略。 思路:倒着使用单调队列,大的放在前,小的放在后。 详见代码: 阅读全文
posted @ 2018-07-30 20:47 温和的提比略 阅读(307) 评论(0) 推荐(0)
摘要:题意略。 思路:本题的思路总的来说就是暴力 + 剪枝。 我们依然用线段树来维护: 定义结点node{ l , r , minn , contirbute} 分别为某个区间的左右端点,和该区间(b序列)内的最小值与该区间对答案的贡献。 当我们修改到某一个区间的时候,如果该区间的minn > 1,那么m 阅读全文
posted @ 2018-07-26 08:52 温和的提比略 阅读(803) 评论(0) 推荐(0)
摘要:题意略。 思路:这题要求第k大之和,我们可以算每个数字对答案的贡献。这次,我们采取一个特殊的手法:我们按数字的大小,从小到大来计算贡献。 先从1开始计算,我们知道,1周围的数字都比1大,假设1在位置p,那么它能做出贡献的区间是:[p - k + 1,p],[p - k + 2,p + 1],..., 阅读全文
posted @ 2018-03-31 14:54 温和的提比略 阅读(143) 评论(0) 推荐(0)
摘要:题意略。 开始想开一个三维的树状数组,但是一算空间不够,正解是离线操作,按位来计算,一共是10位,所以总共是扫10遍,第i遍只处理第i位的询问, 注意在修改后,要把当前这个位的值存下来(这就是cur数组的作用)! 阅读全文
posted @ 2018-03-01 10:08 温和的提比略 阅读(122) 评论(0) 推荐(0)
摘要:TOJ指天津大学onlinejudge 题意:给你由N个数组成的数列,算出它们的所有连续和的异或和,比如:数列{1,2},则answer = 1 ^ 2 ^ (1 + 2) = 0。 这道题有几个关键点: 1.这道题要将十进制数换成二进制数,并且对这些二进制数按位计算,比如说上面的式子,我们将它列成 阅读全文
posted @ 2017-07-08 16:12 温和的提比略 阅读(315) 评论(1) 推荐(1)