随笔分类 -  数据结构:分块

摘要:H 华华和月月种树 链接:https://ac.nowcoder.com/acm/contest/392/H 思路:先得到整棵树最终的形态,在这棵树上进行三种操作,用dfs跑下,第二种操作就直接对最终形态树上这个点子树区间操作,第一种操作的时候是新加一个点,此时我们将那个点的权值设为0就好了,最后单 阅读全文
posted @ 2019-03-10 18:03 冥想选手 阅读(282) 评论(0) 推荐(0)
摘要:Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值 其中k mod i表示k除以i的余数。 例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 阅读全文
posted @ 2018-11-15 21:49 冥想选手 阅读(141) 评论(0) 推荐(0)
摘要:题目描述 Description Smart最近沉迷于对约数的研究中。 对于一个数X,函数f(X)表示X所有约数的和。例如:f(6)=1+2+3+6=12。对于一个X,Smart可以很快的算出f(X)。现在的问题是,给定两个正整数X,Y(X<Y),Smart希望尽快地算出f(X)+f(X+1)+…… 阅读全文
posted @ 2018-11-11 22:27 冥想选手 阅读(166) 评论(0) 推荐(0)
摘要:Description “余”人国的国王想重新编制他的国家。他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理。他的国家有n个城市,编号为1..n。一些城市之间有道路相连,任意两个不同的城市之间有且仅有一条直接或间接的道路。为了防止管理太过分散,每个省至少要有B个城市,为了能有效的 阅读全文
posted @ 2018-11-11 17:32 冥想选手 阅读(158) 评论(0) 推荐(0)
摘要:题目链接:https://nanti.jisuanke.com/t/31451 题意: 给你一颗树,树上各点有初始权值,你有两种操作: 1. 给树中深度为l的点全部+x,(根节点为1,深度为0) 2.求出以x为根的子树权值和 思路: 因为第一个操作是对一整层的树节点+x,那么我们可以很容易的标记每一 阅读全文
posted @ 2018-09-09 11:44 冥想选手 阅读(557) 评论(0) 推荐(1)
摘要:链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2002 思路:和之前那道树分块的题很像,只不过那道是在树上,这道简单些在序列上 还是维护两个数组: num[] 跳出当前块需要的次数 nex[] 跳出当前块到达的点的下标 实现代码: 阅读全文
posted @ 2018-08-29 21:06 冥想选手 阅读(250) 评论(0) 推荐(0)
摘要:链接:http://hihocoder.com/problemset/problem/1236 思路; 有n个五维的向量,给出q个询问,每个询问是一个五维向量,问有多少个向量没有一维比这个向量大。并且答案需要加密,除了第一个答案,其他答案都要和上一个答案异或。 因为是强制在线所以不能用cdq分治写。 阅读全文
posted @ 2018-08-20 17:31 冥想选手 阅读(375) 评论(0) 推荐(0)
摘要:链接: http://acm.hdu.edu.cn/showproblem.php?pid=6394 思路:用dfs序处理下树,在用分块,我们只需要维护当前这个点要跳出这个块需要的步数和他跳出这个块去到的下一个点的下标,这样更新和询问的复杂度就降到了sqrt(n),查询树上的点的时候我们可以用倍增来 阅读全文
posted @ 2018-08-17 15:07 冥想选手 阅读(256) 评论(0) 推荐(0)
摘要:链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1699 思路: 水题,求区间最大最小值,然后减一下,求区间最大最小值线段树,树状数组,分块,莫队都可以,这里直接用分块写了,代码量比较小。 分块写法: 耗时: 阅读全文
posted @ 2018-07-29 13:44 冥想选手 阅读(145) 评论(0) 推荐(0)
摘要:链接: https://loj.ac/problem/6285 思路: 离散化处理下就好了,具体解释在代码里、 ps: 小新新别看了,你学不会的 实现代码: 阅读全文
posted @ 2018-07-27 18:58 冥想选手 阅读(185) 评论(0) 推荐(0)
摘要:链接:https://loj.ac/problem/6283 思路: 多重标记下放,之前写过线段树的多重标记,两个思路是一样的,都是优先处理乘法操作,如果当前块出现乘法操作,那么加法标记也要乘上乘法标记,这样运算的时候就可以直接乘上乘法标记加上加法标记 如果当前块出现加法操作,那只对加法标记有影响, 阅读全文
posted @ 2018-07-27 12:47 冥想选手 阅读(192) 评论(0) 推荐(0)
摘要:链接:https://loj.ac/problem/6282 思路: 用动态的vector去代替数组,这样就可以动态的插入数据了,当一个块的数据插入数据过大时,我们在将整个vector重新分块就好了。 实现代码: 阅读全文
posted @ 2018-07-26 22:44 冥想选手 阅读(309) 评论(0) 推荐(0)
摘要:链接: https://loj.ac/problem/6281 思路: 因为是向下取整开方,那么其实每个数最多被开个个几次就会变成0或者1了,更新的时候我们可以将中间的块标记下是否全部变成了0或者1,如果全变了就不处理 实现代码: 阅读全文
posted @ 2018-07-26 17:02 冥想选手 阅读(133) 评论(0) 推荐(0)
摘要:链接:https://loj.ac/problem/6280 思路: 多设置一个数组sum去存区间值的和就好了,因为数据范围比较大,需要开long long . 实现代码; 阅读全文
posted @ 2018-06-04 19:56 冥想选手 阅读(139) 评论(0) 推荐(0)
摘要:链接:https://loj.ac/problem/6279 思路: 和上一道一样的方法,每个块排序,两端的块暴力找,中间的块二分找到比他小的最大的数,最后取最大的符合条件的数。 实现代码: 阅读全文
posted @ 2018-06-04 18:29 冥想选手 阅读(233) 评论(0) 推荐(0)
摘要:链接:https://loj.ac/problem/6278 思路:分块是真的好用。。。每个块排好序,两端的块直接暴力找就可以了,中间的块用二分找,每次更新重新对两边的块排序就好了。实现代码: #include<bits/stdc++.h> using namespace std; const in 阅读全文
posted @ 2018-06-03 21:34 冥想选手 阅读(228) 评论(0) 推荐(1)
摘要:题目链接:https://loj.ac/problem/6277 题面: 题目描述 给出一个长为 nnn 的数列,以及 nnn 个操作,操作涉及区间加法,单点查值。 题目描述 给出一个长为 nnn 的数列,以及 nnn 个操作,操作涉及区间加法,单点查值。 题目描述 给出一个长为 nnn 的数列,以 阅读全文
posted @ 2018-06-03 17:22 冥想选手 阅读(224) 评论(0) 推荐(0)