- 博客(182)
- 收藏
- 关注
原创 C++读CSV
void _split(const string& s, char delim, vector<string>& elems) { stringstream ss(s); string item; while (getline(ss, item, delim)) { elems.push_back(item); }}vector<string> split(const string& s, char del
2022-05-29 12:38:09
283
1
转载 数据库连接不上可能存在的问题
https://qastack.cn/server/186057/mysql-creating-a-user-that-can-connect-from-multiple-hosts
2022-05-25 12:55:03
244
原创 Go后端服务器(访问html中的静态资源)
如代码所示,前端html页面中可能会存在这样子的引用,当用go写的代码作为服务器时,该怎么让浏览器中的html中的引用正常加载呢<script src="../src/resource/js/jquery.js"></script><script src="../src/resource/js/bootstrap.min.js"></script><script src="../src/resource/js/smoothscroll.js">
2022-05-14 21:37:43
1820
1
原创 [CTSC2018]混合果汁 二分 套 主席树上二分
题意:n种果汁,第iii种果汁的美味程度是did_idi有lil_ili升,价格是pip_ipi升mmm个询问,要求使用果汁的总量不小于LimLimLim,价格不超过GGG,最大化所用的果汁的美味程度最小值思路:大体思路:首先二分出来一个taste,然后在比taste高的里面去找一些价格少的,且能凑到L升的果汁,检查是否能凑出。我们发现题目询问很多次,那么我们对于每一次的询问二分,在二分检查时肯定不可以O(n)去检查,因为这样时间复杂度就变成了O(m∗n∗logn)O(m*n*logn)
2021-10-18 22:42:48
216
原创 P1502 窗口的星星 离散化+扫描线
题意:一个二维平面上有些点有权值。问给你一个H*W的窗口,问窗口星星亮度总和的最大值。H∗W范围:1e6H*W 范围:1e6H∗W范围:1e6坐标范围:1e9坐标范围:1e9坐标范围:1e9星星数目:1e4星星数目:1e4星星数目:1e4题解:我们考虑一维的情况。假设一个序列aaa,给你你最多可以选择连续长度为lenlenlen序列段,问可以选择出最大的序列和为多少。我们可以将这个(单点修改,区间查询)的问题给转换成,(区间修改,单点查询)问题。初始化一个新数组bbb为0对于第iii
2021-10-13 15:43:56
154
原创 [湖南集训]更为厉害 树上主席树-以树深度为下下标建立主席树
题意题解:首先对于树上某个点a来说,假设点b是a的祖先(也就是在a的上面),那么答案很好计算,也就是min(k,dep[a]−1)∗(size[a]−1)min(k,dep[a]-1)*(size[a]-1)min(k,dep[a]−1)∗(size[a]−1)麻烦的就是计算b在a下面的情况。主席树。如何建立这颗主席树呢?按照每个结点的深度建立主席树即可。对于下面的结点来说,我们假设一个结点iii,那么这个结点对答案的贡献则为size[i]−1size[i]-1size[i]−1那么我们在df
2021-10-08 14:03:25
170
原创 P4113 [HEOI2012]采花 树状数组离线
题意:询问区间内有多少个出现次数大于等于2次数的种类。n<=2e6题解:主要是n<=2e6,不然确实有很多种做法跟HH的项链一样的思路,发现是离线,想了一会发现好像跟hh的项链一样哎,我们按照查询的区间按照右端点排序,然后开始遍历这个序列,如果这个数前面出现过一次,那么我们就在他前面的那个位置+1,前面的前面的位置-1,然后正常统计即可。其实跟HH的项链一个思路。代码:#include<bits/stdc++.h>#define endl '\n'#define i
2021-09-29 15:34:49
148
原创 P3224 [HNOI2012]永无乡 FHQ-Treap 启发式合并
题意:B x yB\ x\ yB x y 表示在岛 xxx 与岛 yyy 之间修建一座新桥。Q x kQ\ x\ kQ x k 表示询问当前与岛 xxx 连通的所有岛中第 kkk 重要的是哪座岛,即所有与岛 xxx 连通的岛中重要度排名第 kkk 小的岛是哪座,请你输出那个岛的编号。题解:一眼题,用并查集维护一下连通块,平衡树合并时用启发式合并,合并最多也就nlognnlognnlogn次,总时间复杂度位O(nlogn2
2021-09-28 12:05:05
393
原创 P1486 [NOI2004] 郁闷的出纳员 FHQ-Treap
题意:第一行有两个整数 nnn 和 minminmin。nnn 表示下面有多少条命令,minminmin 表示工资下界。接下来的 nnn 行,每行一个字符xxx和一个整数 kkk,表示一条命令。命令可以是以下四种之一:I k 新建一个工资档案,初始工资为 k。如果某员工的初始工资低于工资下界,他将立刻离开公司。A k 把每位员工的工资加上 k 。S k 把每位员工的工资扣除 k。F k 查询第 k 多的工资。在初始时,可以认为公司里一个员工也没有。题解:只做过一两道平衡树的题目
2021-09-24 21:30:07
170
原创 P4216 [SCOI2015]情报传递 LCA+树上主席树 离线操作
题意:给你一棵n个点的树,初始每个位置没有点权有m次操作1 x:让一个点从当前时刻开始,每秒操作点权++2 x y c:查询一条链中有多少点的点权大于c其中每秒操作点权++就是指我每操作一次,无论是否和那个点有关,那个点权值都会++1操作对于每个点只会开始一次题解:此题的做法非常多大部分都是O(m(logn)2)O(m(logn)^2)O(m(logn)2)的做法,也就是很朴素的树剖+线段树离线询问。学习了一种O(mlogn)O(mlogn)O(mlogn)的做法,十分巧妙。看到查询
2021-09-21 16:34:37
158
原创 [51nod] 1766树上的最远点对 树的直径 树剖LCA+ST表静态查询
题意:给你一棵带权树,q次查询,每次给出两个区间,[l1,r1][l2,r2][l_1,r_1] [l_2,r_2][l1,r1][l2,r2]从这两个区间中分别选择两个数字,使得这两个点的距离最大,这个最大的距离是多少。题解:树的直径性质:距离树上任意点最远的点一定是直径的一端。此结论在点集中依然试用。那么答案路径的两端一定是[l1,r1][l_1,r_1][l1,r1]直径的一端和[l2,r2][l_2,r_2][l2,r2]直径的一端的连线。那么我们只要求出[l1,r1][
2021-09-17 20:52:03
140
原创 CF702F T-Shirts (排序+平衡树)
题意:有nnn种 T 恤,每种有价格 cic_ici 和品质 qiq_iqi。有 mmm 个人要买 T 恤,第 iii 个人有 viv_ivi 元,每人每次都会买一件能买得起的 qiq_iqi 最大的 T 恤。一个人只能买一种 T 恤一件,所有人之间都是独立的。问最后每个人买了多少件 T 恤?如果有多个 qiq_iqi 最大的 T 恤,会从价格低的开始买。题解:对所有衣服按照q[i]q[i]q[i]从大到小排序对每个人维护a[i]a[i]a[i]表示其剩余的钱,b[i]b[i]b
2021-09-15 00:12:54
295
原创 Naive Operations (线段树 分析复杂度)
题目:给出一个长度为n初值为0的数组,以及长度为n的b数组,然后q次操作,add(l,r) 使得区间l-r所有元素+1,或者查询l~r区间a[i]/b[i]的和题解:很少情况下能很快写出一道线段树题目,关键还0调试首先题目说了b是个排列,突破点也就是b这个条件。因为题目是向下取整,那么假设b[1]=100000,那么你对他修改99999次都是没有任何影响的,那岂不是可以不去修改这个点。同理考虑其他的节点,发现b[i]越大,那么a[i]/b[j]如果变大的话,需要修改的次数也会越多。我们计算一下这
2021-09-09 19:15:19
253
原创 Codeforces Round #742 (Div. 2) E. Non-Decreasing Dilemma (线段树维护区间连续问题)
题意:操作1:把x位置的数字修改成y。操作2:查询[l,r]之间不下降序列的个数。题解:线段树维护区间和问题 (这是套路,想不到只能说做题少别打我) 。用五个变量进行维护。sum区间总个数llen从左边这个数字开始往右最长不下降序列长度(往右端最长延伸)rlen从右边这个数字开始往左最长不上升序列长度(往左端最长延伸)lnum这个区间最左端的数字rnum这个区间最右端的数字很明显lnum和rnum很好维护,直接pushup即可。如果左子树的右端小于等于右子树的左端。sum则需要在两
2021-09-06 01:41:23
323
原创 P4755 Beautiful Pair (数据结构+分治)
题意:小D有个数列a ,当一个数对(i,j)(i≤j)(i,j)(i\leq j)(i,j)(i≤j)满足 aia_iai和 aja_jaj 的积不大于 ai,ai+1,.........,aja_i, a_{i+1},.........,a_jai,ai+1,.........,aj中的最大值时,小D认为这个数对是美丽的.请你求出美丽的数对的数量。n≤1e5n \leq1e5n≤1e5ai≤1e9a_i \leq1e9ai≤1e9有人推荐笛卡尔树的练习题?但是怎么也想
2021-09-04 15:03:00
272
1
原创 P6617 查找 Search 线段树 查找区间内是否有两个和为w的数(w不变)
题解:每个点x,设置其前驱为离其最近的w-x的位置每次修改可能影响O(n)个位置:w-x x x x x x x…这样后面每个位置的前驱都是w-x如果修改了w-x的值,这样会导致O(n)个修改注意到这个是存在性判定如果存在两个(i1,j1),(i2,j2)(i_1,j_1),(i_2,j_2)(i1,j1),(i2,j2)使得a[i1]+a[j1]=w,a[i2]+a[j2]=wa[i_1]+a[j_1]=w,a[i_2]+a[j_2]=wa[i1]+a[j1]=w,a[i2]+
2021-08-28 22:05:22
213
原创 2021牛客暑期多校训练营4 Tree Xor (区间异或上一个数+区间求交)
题解:首先我们可以发现,只要确定了一个值,那么树上其他的值也可以确定下来了,但是显然,遍历一棵树的时间复杂度为O(n),如果枚举+暴力判断的话时间复杂度O(1e9∗n)O(1e9*n)O(1e9∗n)。看了大佬的题解。首先可以假设a[1]=0a[1]=0a[1]=0,然后求出其他的点分别为a[i]a[i]a[i]假设我们把a[1]a[1]a[1]变成xxx,那么其他的点也都会被异或上一个xxx。假设l[1]<0⊕x<r[1]l[1]<0 \oplus x<r[1]l[1]&
2021-08-21 22:21:36
206
原创 2021牛客暑期多校训练营3 I-Kuriyama Mirai and Exclusive Or (差分+位运算)
题意:两个操作:1.给区间[l,r][l,r][l,r]之间的数异或xxx2.给区间[l,r][l,r][l,r]之间异或(x+(l−i))(x+(l-i) )(x+(l−i))题解:我们发现对于1操作,直接差分即可对于2操作,我们每次取 lowbit(x) ,设lowbit(x)为 2k2^k2k,对于 i−l<2ki-l<2^ki−l<2k, a xor (x+i−l)=a xor x xor (i−l)a\
2021-08-14 16:07:00
127
原创 P3797 妖梦斩木棒 线段树区间合并
题意:1 x C 将第x个小段的木棒替换成C型,C只会是’X’,’(‘,’)’中的一种2 l r 询问妖梦从第l段到第r段之间(含l,r),有多少个完整的木棒完整的木棒左右两端必须分别为’(‘和’)’,并且中间要么什么都没有,要么只能有’X’。题解:典型的线段树维护区间合并问题 (特别注意query中的合并)开三个数组,ls代表左端是否拥有右括号,rs代表右端是否有左括号,ishave用来代表区间中是否有括号。代码:#include<bits/stdc++.h>#define
2021-08-12 20:53:02
148
原创 HDU7059-Counting Stars 线段树 (区间加最低位置,区间减最高位)
题意:一个序列,三种操作1.查询序列l,r之间的和2.给l,r之间每个数加上自己二进制最高位3.给l,r之间每个数减去自己二进制的最低位置。题解:我们把一个数分解成二进制的状态进行思考,设cnt为数x当前二进制状态下不为0的位数有多少,我们发现对于两个修改操作,你无论怎么修改,cnt都不会增加,考虑1e9最多有30位不为1的数,你每进行一次操作3,这个数的cnt就会-1,那么每个数最多可以进行30次操作三,多余的操作三没有什么效果。我们可以把一个数分成(最高位+其他位)来进行维护。那么对于操
2021-08-12 17:08:56
285
1
原创 hdu6989 (莫队+单调栈+ST表)
题意: 求l-r之间所有区间最大值最小值之和的期望,除法按照逆元来求;题解: 看之前刚补的一道题目,那道题目跟这道题差不多,解释都在下面的链接中。[HNOI2016]序列就是取余把人取傻了。#include<bits/stdc++.h>#define int long longusing namespace std;const int maxn = 4e5+10;const int mo=1e9+7;int n,m;int a[maxn];int anshou[maxn]
2021-08-06 11:41:01
192
原创 P3246 [HNOI2016]序列(查询l-r中所有区间的最小值之和)
多校时做到了查询区间l-r中所有区间的最大值与最小之和的题目,有好多细节不太会处理,去看题解发现是一道差不多的原题,于是打算先把原题补一下。题解:ST表+单调栈+莫队看到计算区间最小值之和,不难想到可能会与单调栈有关系,再想了一下,应该是需要计算每个数对这个区间做了多少贡献。然后看到离线操作还可以去思考莫队,但是很遗憾,想到这里思路就没太有了。去翻了翻题解恍然大悟。我们考虑莫队的转移,如果我们能O(1)O(1)O(1)求出左端点对整个区间的贡献,和右端点对区间的贡献,那么就可以莫队了首先我们可以看
2021-08-06 09:52:06
567
原创 HDU6964 I love counting (字典树+莫队)
题意:给定一个长度为 nnn 的序列c,qc,qc,q 次询问,每次给出l,r,a,bl,r,a,bl,r,a,b求在[l,r][l,r][l,r]中有多少种不同的值 kkk 满足 k⊕a≤b.k⊕a≤b.k⊕a≤b.题解:莫队+字典树补题的时候看到了带佬新得一种写法,即把字典树当成一颗完全二叉树去跑,不需要新建结点编号。在 Trie 上顺着 a⊕b 走 ,为什么要跟着a⊕b走呢?因为顺着a⊕b走也就是,顺着a⊕字典树=b走 当b=1时,就可以把c⊕a=0加入答案若 b 当前位是 1,
2021-07-30 21:55:13
214
原创 CF703D Mishka and Interesting sum(求区间出现次数偶数次数的异或和)
题意: 给定 n 个数的序列 a。m 次操作。操作有一种:求 al到ara_l到a_ral到ar 中,出现偶数次的数的异或和。n,q<=1e6,a[i]<=1e9n,q<=1e6, a[i]<=1e9n,q<=1e6,a[i]<=1e9题解: 因为本题求得是出现次数为偶数次数的异或和,我们可以知道,两个相同的数异或和为0,那么区间l-r之间的异或和即为出现次数为奇数个数数的异或和,这样我们再求一下区间l-r中不同数的异或和(树状数组老套路),用着两个异或和既可以
2021-07-30 11:47:45
208
原创 HH的项链 (求区间内有多少个不同的数字)
这种题之前用莫队做过,这几天看到了一个树状数组的解法,十分巧妙,不卡常,应用广,估计会广泛与其他类型题目结合。题解:由于本题可以离线查询,那么我们将其查询按照右端点进行排序。然后从小到大开始遍历这个序列,如果这个数没出现过,那么我们便在当前位置+1,若之前出现过,那么我们在之前出现的位置上-1,然后当前位置上+1.(因为统计的是不同数字的个数,所以我们统计离r结点最近的即可)。如果遇到r等于i时,我们就统计答案,答案为区间l-r的和。代码:#include<bits/stdc++.h>
2021-07-29 19:29:55
97
原创 2021HDU多校第一场 zoto(莫队+分块)
题意:给你一个序列,q次询问,每次询问l-r的区间内数字大小为x-y之间内不重复的个,保证数据所有大小为1e5以内。思路:比赛的时候通过调整了一下分块的大小和各种优化,用莫队把题目给卡过去了,实在是没想到竟然能卡过去qwq,不过我莫队每次移动时的是logn的(套了一个权值线段树),肯定也不是正解(虽然过了)。学习了一下正解,感觉还是自己太菜了qwq。正解把莫队的左右指针移动给变成了O(1)O(1)O(1)的时间复杂度。感觉std的方法还是很巧妙的,用莫队去维护序列的范围,然后用分块来维护数字的大
2021-07-23 17:06:15
443
原创 牛客练习赛85 数学家的迷题 (带修莫队/线段树)
题意:1:将a[id]a[id]a[id]的值改为xxx。2:令t=a[l]×a[l+1]×...×a[r−1]×a[r]t=a[l]×a[l+1]×...×a[r−1]×a[r]t=a[l]×a[l+1]×...×a[r−1]×a[r],求t能被多少个不同的素数整除。题解:本题有两种解法,带修莫队和线段树,带修莫队的话需要开个O3提提速,不然会T一个点。1.带修莫队题目不是5e4的范围吗,带修莫队会卡时间?因为莫队移动的操作时间复杂度为O(1),但是这个移动的时间复杂度却不是O(1),应该是
2021-06-30 21:52:29
209
原创 [国家集训队]数颜色 / 维护队列 (带修莫队模板题)
题意:墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会向你发布如下指令:1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。2、 R P Col 把第P支画笔替换为颜色Col。为了满足墨墨的要求,你知道你需要干什么了吗?思路:如果没有修改的话,那么就可以用莫队很轻松的做出来(或者是主席树)。但是带了修改我们该怎么办呢,带修莫队或者(树套树)。空间时间树套树O(nlogn2)O(nlogn^2)O(nlo
2021-06-30 00:59:11
227
原创 Beautiful Subarrays (01字典树 瞎搞)
题意:题解:一看问的是子序列,并且还是异或。首先想到01字典树,再一看让你求子序列的个数,大致是想让你把这个序列进行前缀异或处理后然后再01字典树上进行操作吧。假设01字典树往左边是0右边是1对于如何寻找k这个值,肯定是顺着k这个值对应的链下去,那么对于这条链右边的链来说,值都是大于k的。那么我们在递归k的时候,对于右边的链直接把他们的个数给加上即可。这题比较难处理的是对于异或前缀的一个转换。特别注意叶子节点需要特判一下。大佬的代码:#include<bits/stdc++.h>
2021-06-21 22:57:10
252
原创 牛客练习赛84:牛客推荐系统开发之标签重复度(点分治+动态开点权值线段树)
题意:给你一棵树,问树上所有两点路径上的(最大值最小值乘积)之和。题解:很明显的一个点分治问题,然后就是个二维偏序问题了(虽然我也不知道啥是二维偏序)。点分治不难,重点是点分治内cal函数如何去写。假设当前计算的这个树是以root为根节点,我们对于每一次分治的过程,每个结点储存两个值,一个是从根节点到当前结点路径上的最大值,另一个是最小值记为maxnode,minnodemax_{node},min_{node}maxnode,minnode。对于任意两点,是由这两个点到root的边上的最大
2021-06-14 21:04:39
171
1
原创 CF911G Mass Change Queries (线段树区间 合并)
题意:给出一个数列,有q个操作,每种操作是把区间[l,r]中等于x的数改成y.输出q步操作完的数列.题解:100个数,很容易想到要从这里进行突破,对于某次操作我们只需要把这个区间的数x给移动到y的这个数的集合里面不就可以了。线段树合并!这样的话我们对于每一种颜色动态开一个线段树,合并就把颜色为x的线段树区间l r合并到颜色为y的线段树的区间l r 上即可。之前大多数的线段树合并是整颗线段树进行合并,这个是针对于某段区间进行合并,我们需要稍微调整一下这个update即可。最后只需要遍历一遍这100
2021-06-09 21:50:40
1111
2
原创 [SDOI2011]染色 (线段树维护子段问题+树剖)
题意:给定一棵 n 个节点的无根树,共有 m 个操作,操作分为两种:1.将节点 a 到节点 b 的路径上的所有点(包括 a 和 b)都染成颜色 c。2.询问节点 a 到节点 b 的路径上的颜色段数量。颜色段的定义是极长的连续相同颜色被认为是一段。例如 112221 由三段组成:11、222、1。题解:树剖+线段树维护区间子段和问题。如果在在单独的线段树上操作的话,难度还不是特别高,这个题因为转移到了树上去,树剖的本质是把线段树的区间给分成了好几段,所以我们在经过树上路径的时候,衔接位置要特别注
2021-06-08 22:36:24
164
原创 [USACO08JAN]Cell Phone Network G 树形dp
题意:John想让他的所有牛用上手机以便相互交流,他需要建立几座信号塔在N块草地中。已知与信号塔相邻的草地能收到信号。给你N-1个草地(A,B)的相邻关系,问:最少需要建多少个信号塔能实现所有草地都有信号。思路:开始思考的是使用dp[x][1/0]来表示结点是否有保安来解决这个问题。但是细想了一下,父亲结点也会影响改结点的状态转移过程,所以两个结点肯定是不可以的。用dp[x][0/1/2]dp[x][0/1/2]dp[x][0/1/2]来表示x结点被自己/儿子/父亲染色的最小染色数。很容易就可以
2021-06-02 13:47:00
213
3
原创 P4178 Tree (点分治)
题意:给定一棵 n 个节点的树,每条边有边权,求出树上两点距离小于等于 k 的点对数量。题解:根点分治模板提很相似,只不过这个题目让你去维护小于等于k距离点的个数,这个时候我们还是要用到桶的思想,只不过每次查询查的时小于等于(k-某个值)的个数,对于这个操作,我们可以用一个树状数组来维护即可。做的时候还是很多方面的小bug,比如说找重心的时候手残…等等代码:#include<bits/stdc++.h>using namespace std;const int maxn=1e
2021-05-16 20:26:18
147
原创 P3806 【模板】点分治1
题意:给定一棵有 n 个点的树,询问树上距离为 k 的点对是否存在。题解:#include<bits/stdc++.h>#define endl '\n'#define int long longusing namespace std;const int maxn=2e5+10;struct E{ int to,w,next;}edge[maxn];int head[maxn],cnt;int maxp[maxn],dis[maxn],sz[maxn];bool
2021-05-15 22:56:18
94
原创 SP10628 COT - Count on a tree (树剖+可持久化线段树)
题意:给定一个包含 N 个结点的树. 树节点从 1 到 N编号.。每个节点有一个整数权值。我们会要求您执行以下操作:u v k : 询问从节点 u 到 节点 v 的路径上的第k小的权值输入在第一行中有两个整数N 和 M(N, M <= 100000)在第二行中有N 个整数, 第i个整数表示第i个节点的权值。接下来的N-1 行, 每行包含两个整数 u v, 它表示有一条边 (u, v).在接下来的 M 行中, 每行有三个整数 u v k, 代表查询从节点 u 到节点 v的路径上权值第k小
2021-05-13 20:18:16
114
原创 [SCOI2007]蜥蜴 (网格图经典四方向建边)
题意:在一个n*m的矩阵中,每个格子都有一定的高度,当高度为0时表示该格子不存在,现在这个矩阵中有若干只蜥蜴,每只蜥蜴跳到格子上时,该格子的高度会减一,每只蜥蜴可以跳跃直线距离不大于D的长度,问最少有几只蜥蜴无法逃离题解:网络流网格建图。网格一半来说就是拆点建图,因为权值在点上了qwq。这个题目的话如何想到拆点呢?其实是因为每跳一次这个格子就降低一下,这决定了可以有几只蜥蜴从这上面经过。(毕竟不会有zz在一个点上跳来跳去)然后就是如何建图了。考虑到这个图只有20*20的范围。窝门设一个点的
2021-05-12 15:35:56
153
1
原创 P2764 最小路径覆盖问题 网络流输出方案
题意:求DAG的最小路径覆盖并输出方案。所谓最小路径覆盖是指,将原图分为若干条路径,任意两条路径不能有公共点,要使路径数量尽可能少。最小路径覆盖,emmm好像跟最少边覆盖差不多。但这俩确实不是一个东西。最小边覆盖:边数最小的边覆盖集称为最小边覆盖,通俗地讲,就是极小边覆盖中的最小的一个集合。最小边覆盖在二分图中的应用:最小边覆盖 = 最大独立集 = n - 最大匹配,这个是二分图上的一个性质。两个很小的点:必须要求原图为二分图;边覆盖集中可能有多条边覆盖同一个顶点,其实可以这条边说是为了覆盖另一
2021-05-10 22:57:36
336
原创 Alyona and a tree (树上倍增+差分)
题意: 来源(洛谷翻译题解:首先先转化一下问题,题目问当前结点(u)的子树中有多少个孩子(设为v)满足dis(u,v)<=a[v],那么我们可以统计每个结点分别对哪些结点做出了贡献。首先考虑暴力的解法,枚举每个点,针对于每一个结点,不断的去往上找他的父亲结点,并且在找的过程中给每个结点+1的权值,直到找到的结点跟当前结点的距离大于当前结点为止。这样的时间复杂度最差是n^2。我们发现一步一步的往上找,显然很暴力,对于这种题目,我们可以用类似于二分的方法去查找,那也就是倍增了,显然我们可以快速
2021-05-06 14:08:38
634
2
原创 牛客练习赛81 小Q与彼岸花 (分块+可持久化01trie)
题意:题解:因为这个题目是弱化以后的,正常的范围是5e4 .看了官方题解去学习了一波可持久化01trie然后回来把这个题补完。可持久数据结构其实就是我们的数据结构的内容会不断发生变化,而我们还要查询以前的历史版本,比如某个区间的情况。听名字可以听出来,可持久化01trie跟可持久化线段树差不多的效果,对于01字典树来说,可以指定查询 l−rl-rl−r 范围内的数组成的字典树。但是针对于这个题目我们直接使用可持久化01trie进行维护,时间还是不能被允许的,所以说, 我们还需要去继续优化。如何
2021-04-26 19:07:53
192
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人