数据结构
nof_uck
人一我十,人百我万
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
吉首大学2019年程序设计竞赛 I滑稽树上滑稽果
题意相当于求 S(n,m)2n,S(n,m)=∑i=0mCni\frac{S(n,m)}{2^n},S(n,m) = \sum_{i=0}^mC_n^i2nS(n,m),S(n,m)=∑i=0mCni但是共有T组数据,所以必须离线+预处理。然后对于这些询问,可以抽象为一个区间,考虑用莫队来维护。那么想要用莫队来维护,必须找到移动端点的表达式。//S(n,m+1) = S(n,m) + C(n,m+1) //S(n-1,m) = 2*S(n-1,m) - C(n-1,m)其余都是莫队板子,原创 2020-10-02 16:50:57 · 163 阅读 · 1 评论 -
序列
题意:思路:贴一个大佬写的大致理解就是全从0 开始,然后根据原序列构造一个差分序列,然后就相当于对于某个区间全+1了,(前缀和之后就是原数) 然后对于某个差分后的负数,肯定得由前面的值加起来,然后就找正数抵消它,由此有最大值、最小值,先把离得远的抵消了,就是最小值的情况。反之则最大值。不过貌似可以用吉老师线段树求最小值...原创 2020-07-06 19:39:50 · 205 阅读 · 0 评论 -
牛客挑战赛39 C牛牛的等差数列
牛牛的等差数列由于是每个区间都要加上一个等差数列,而又因为等差数列的第iii项可以直接得到 ,等差数列+等差数列依旧是等差数列。具有可加性,所以可以用线段树来维护,那么我们每个节点维护的的信息有区间和sumsumsum,区间首项ffffff,区间公差dddddd,最后查询就直接查询sumsumsum,那么我们区间的首项和区间的公差又怎么维护,每个节点都只能维护一段区间,比如下面这种去情况:[L,R][L,R][L,R]是要更新的区间,首项为aaa,公差为ddd,但是在线段树中被分成了3部分,很明显原创 2020-05-16 14:14:06 · 483 阅读 · 1 评论 -
牛客OI周赛15-提高组 A环球旅行
题意一颗有n(n<=106)n(n<=10^6)n(n<=106)个结点的数树,每条边有w的花费,可以随意删除一条边,删除之后剩下2棵树,要使这2棵树其中最大的2点距离 最小思路首先肯定是删除原树直径中的点,因为删去其他边,那么最长的还是直径,所以删去直径的边才有可能减少距离,可以先把直径起始点s、t 找出来,然后依次枚举删去直径上的边之后剩余2颗子树的最长路径。分别...原创 2020-04-06 16:58:16 · 220 阅读 · 0 评论 -
Codeforces Round #622 Skyscrapers (hard version)
题意:给你nnn个数mim_imi,要求找一个序列aia_iai满足ai<=mia_i<=m_iai<=mi并且aia_iai左右不能同时有aj>ai(j!=i)a_j>a_i(j!=i)aj>ai(j!=i)求这个序列和最大的情况。思路:首先aia_iai左右不能同时有aj>ai(j!=i)a_j>a_i(j!=i)aj&...原创 2020-02-25 17:42:06 · 407 阅读 · 0 评论 -
cf1304 F2 Animal Observation (hard version)
题意:题目大意:给你一个n∗m的矩阵,你可以在每行放置一个2∗k的矩形框,问你被矩形框 ,框中的数的和最大值是多少。每个数只计算一次。思路:首先对于eazy版本(暴力)的求解方式。我们用dp[i][j]来记录状态,同时表示前i天在第j列收获的最大值。那么怎么更新它?把能覆盖区间[j,j+k-1]的区间和不覆盖的分开算。覆盖的我们在计算的时候就要把那部分给减去,那么覆盖[j,j+k-1...原创 2020-02-22 18:13:45 · 811 阅读 · 0 评论 -
cf1304 E. 1-Trees and Queries
题意:先给你一棵树,然后q次询问,每次询问加上一条边,x<–>y的一条边,然后问a,b之间的边数是否为k,一些边可以重复走。每次询问独立,就是加了之后的这条边询问结束就删除了。思路:我们没加x<–>y这条边是,a到b就一条路径(树),然后加了一条边,无非就多了2种可能a到x ,x到y,y到ba到y,y到x,x到b就这三种可能,然后只要他们的边数小于等于k并且奇...原创 2020-02-22 13:34:49 · 248 阅读 · 0 评论 -
2019icpc上海区域赛 F A Simple Problem On A Tree
F A Simple Problem On A Tree题意:一棵树,有权值,4种操作,1:u,v路径上的点权值全部为w2:u,v路径上的点权值全部加w3:u,v路径上的点权值全部乘w4:u,v路径上的点w3w^3w3和思路:首先肯定是要把树上的操作转换为连续区间,所以(树)刨一下,然后接下来就是线段树操作了。线段树操作:求w3w^3w3的和,所以我们维护一个sum3,表示w3w...原创 2020-02-19 20:29:54 · 542 阅读 · 0 评论 -
2019icpc上海区域赛E Cave Escape
E Cave Escape题意:给定一个n∗m的格子矩阵,其中有一个格子是起点,一个格子是终点。从起点开始移动,每次能移动到有相邻边的格子中,每个格子都有一个权值v,若从点a移动到点b,且b点未被访问过,则可以获得Va∗Vb的收益,若移动到终点,可以选择先不出去,继续在图上乱走,问如何可以使得走出终点后获得得收益最大?(只需要输出最大收益即可)思路:不管起点在哪里,因为权值都为正数,我们要让收...原创 2020-02-19 20:29:00 · 666 阅读 · 0 评论 -
2019icpc上海区域赛D Spanning Tree Removal
D Spanning Tree Removal题意:给定一个n的完全图,每次操作是从图中移除一棵生成树的所有边,问最多能进行多少次这样的操作?输出操作次数和每次移除的生成树的边。思路:边n*(n-1)/2,每颗生成树为n-1条边,所以猜测n/2条边,构造方法的话也比较巧;所有点顺时针编号(0~n-1)以x为起点,连接的点y为顺时针+1从y找下一个点,连接的点z为逆时针-2然后形成一个z...原创 2020-02-19 20:28:10 · 605 阅读 · 0 评论 -
2019icpc上海区域赛H Tree Partition
H Tree Partition题意:一颗(n<=1e5)的树,要求把其分为(k<=n)个子树,要求每个子树的最大值最小。思路:首先二分最大值mid,然后在对于这个最大值check,让每颗树都尽量的大(<=x),以致于我们砍的次数少,如果砍的次数多了,那么说明这个max小了,反之则大了。code#pragma GCC optimize(2)#include<bit...原创 2020-02-19 20:26:45 · 763 阅读 · 0 评论 -
2019上海区域赛B Prefix Code
B Prefix Code题意:给出n个数字(有前缀0),长度均小于10,问是否有一个数是其他数的前缀?思路:字典树查找即可,vis表示走过的路径和ed标记结尾,在insert就可判断。code#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;const int man = 1e4+10;...原创 2020-02-19 20:25:27 · 702 阅读 · 0 评论 -
2019icpc上海区域赛K Color Graph
B Prefix Code题意:给出n个数字(有前缀0),长度均小于10,问是否有一个数是其他数的前缀?思路:字典树查找即可,vis表示走过的路径和ed标记结尾,在insert就可判断。code#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;const int man = 1e4+10;...原创 2020-02-19 20:22:36 · 717 阅读 · 0 评论 -
2019icpc上海区域赛(部分题解)
B Prefix Code题意:给出n个数字(有前缀0),长度均小于10,问是否有一个数是其他数的前缀?思路:字典树查找即可,vis表示走过的路径和ed标记结尾,在insert就可判断。code#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;const int man = 1e4+10;...原创 2020-02-17 16:59:17 · 1177 阅读 · 0 评论 -
cf1284 Hello 2020 D. New Year and Conference
传送门题意有n对时间区间,分别表示在a场地和b场地的时间区间,然后现在要求你找这些所有的子集在a场地没有冲突,且对应的b场地也没有冲突,或者在a场地有冲突,且对应的b场地也有冲突。满足这些就输出yes,否则no思路首先我们可以转换一下,找no的情况,就是找所有子集在a有交集,b没有交集(a没有交集,b有交集)所有子集可以转化为任意2个区间是否有交集,因为3、4…都可以有2个组成,只需判是...原创 2020-02-15 15:29:39 · 244 阅读 · 0 评论 -
cf613 Dr. Evil Underscores 01字典树
传送门题意n个数,找一个数x使得x与每个数的异或的最大值最小。n<=1e5,0=<ai<=230−1n<=1e5,0=<a_i<=2^{30}-1n<=1e5,0=<ai<=230−1思路首先每个数全写成二进制的形式,我们可以发现,当第i位上全都相同(同1同0),这一位对最终的max可以没有贡献,让x的这一位与其一样就抵消了,但是如...原创 2020-02-15 14:43:19 · 177 阅读 · 0 评论 -
树的直径+证明
概念树的直径:2点距离最远的路径。结论先说结论,对于一颗无根树,首先随便找一个点 u 开始进行搜索,找到离当前点最远的一点 s , 然后从 s 开始搜最远的点 t ,树的直径就为 s - t 。证明找到直径,我们只需找到直径2个端点其中的一个,然后找到离当前点最远的点即为另一个端点。1.首先u在s-t的路径上,很明显是对的,到达u最远的点必为s或t,因为是从u开始搜最远的点的。2.u...原创 2020-01-23 16:36:02 · 899 阅读 · 0 评论 -
HDU - 3397(线段树区间合并,01覆盖)
链接题意有5种操作op = 0 ,改变[a,b]区间值全为0op = 1 ,改变[a,b]区间值全为1op = 2 ,改变[a,b]区间值翻转,0 --> 1 ,1 --> 0op = 3,,查询[a,b]区间所有1的个数op =4,查询[a,b]区间最长连续1的个数思路首先很明显需要用线段树来维护区间信息,线段树维护的信息int sum[man<<...原创 2019-12-18 19:08:21 · 279 阅读 · 0 评论 -
Codeforces Round #200 (Div. 1)D Water Tree
传送门题意给你n(n<=5e5)n(n<=5e5)n(n<=5e5)个节点的树。m(m<=5e5)m(m<=5e5)m(m<=5e5)个操作1 v 把v和儿子全部置为12 v 把root到v之间全部置为03 v 查询v思路树上的区间操作,很明显的一个树链刨分+线段树维护线段树的flag数组表示置为0或者1.区间修改+单点查询代码#pra...原创 2019-12-12 15:41:47 · 144 阅读 · 0 评论 -
Longest Subarray HDU6602
hdu6602题意:给一个长度为n的序列,序列中每个值的取值范围是[1,c],找最长的满足条件的区间,条件为:求满足对于值为 [1, c] 的每种数出现的次数都要大于等于k或者等于0,找到最大的区间大小。思路:参考自这种题一看,区间个数是很多的,但对于所有的这些区间,我们可以通过枚举端点来找到该端点下的可行区间,所以我们可以枚举右端点,然后通过k找到可以选取的左端点区间。我们考虐某种特...原创 2019-09-05 21:44:58 · 225 阅读 · 0 评论
分享