随笔分类 -  数据结构

上一页 1 ··· 3 4 5 6 7
摘要:n<=100000个数,求划分为若干和不小于0的区间的方案数%1000000009。 注意模数啊啊啊。。f(i)--前i个数方案数, n2过不了。不过上面那个东西就是找满足sum(i)>=sum(j)的f,随便线段树合并或者平衡树想必都可以写啦 然而splay写炸了。。求和最后一步旋转转错了。。 1 阅读全文
posted @ 2017-09-13 07:15 Blue233333 阅读(183) 评论(0) 推荐(0)
摘要:n<=100000的树,砍S<n条边,求砍完后S+1棵树的最大直径的最小值。 树的直径要小小哒,那考虑一棵子树的情况吧!一棵子树的直径,就是子树根节点各儿子的最大深度+次大深度。就下面这样: 最大值最小肯定二分答案啦,那这棵子树如果有毛病呢,砍谁呢?肯定砍最大深度啦!所以就子树最大深度+次大深度有毛 阅读全文
posted @ 2017-09-11 16:56 Blue233333 阅读(218) 评论(0) 推荐(0)
摘要:n<=1000000个数互不相同,我回答m<=25000个询问说Li到Ri最小值是Xi,求最早第几次答得互相矛盾。 首先找到矛盾的情况:一是两个无交区间最小值相同,二是大区间最小值比它子区间的最小值大。 方法一:二分答案,每次看一段里面有没有这两种冲突。先把询问按Xi排个序扫一次就知道有没有冲突一, 阅读全文
posted @ 2017-09-08 12:28 Blue233333 阅读(295) 评论(0) 推荐(0)
摘要:n<=300000个点的树,给m<=300000条带权路径(ui,vi,保证vi是ui的祖先)求覆盖整棵树每条边的最小权和。 好题好姿势!直观的看到可以树形DP,f[i]表示把点i包括它爸爸下面那条边都覆盖的最小权,就用经过他爸爸那条边的所有路径,各条路径加上一些子树信息来更新即可。 这样时间炸,那 阅读全文
posted @ 2017-09-05 18:52 Blue233333 阅读(448) 评论(0) 推荐(0)
摘要:给个长度<=1e5的串s,再给n个模板串总长不超1e5,每次把s中起始位置最早的一个模板串删掉,求最后剩的串。 AC自动机,开个栈记一下每次走到哪里,匹配成功后直接在栈里找到这一串的初始位置对应自动机上的节点,从而回到刚才的样子就行了。 1 #include<stdio.h> 2 #include< 阅读全文
posted @ 2017-09-03 22:27 Blue233333 阅读(198) 评论(0) 推荐(0)
摘要:n<=10000个点(xi,yi),找到一个不同于给出的所有点的点,使得该点到所有点的曼哈顿距离最小并找出这样的点的个数。 第一眼看上去这不是中位数嘛,奇数一个点偶数一片,然后找一下这篇区域有几个不符合的点即可。不过要找出“不同于给出的点”的点,那万一中位数那个点被占了,就找它四周四个点即可。 错误 阅读全文
posted @ 2017-09-02 19:54 Blue233333 阅读(201) 评论(0) 推荐(0)
摘要:给n<=50000条01串,m<=50000个询问,每次给出一个01串求有多少个n条中有多少是它的前缀以及它是多少条的前缀。 前缀?Trie!匹配时记一路上单词节点的总量加上最后一个节点子树中单词节点总量即可。 1 #include<stdio.h> 2 #include<string.h> 3 # 阅读全文
posted @ 2017-08-31 13:06 Blue233333 阅读(246) 评论(0) 推荐(0)
摘要:n<=20000个车站,车能同时载C<=100个人,求能满足K<=50000群人的多少个。每群人给起点终点和人数,一群人不一定要都满足。 一开始想DP,想不出,很菜。 贪心即可。如果有右端点相同的几群人,那肯定优先满足左端点大的;如果有两群人发生冲突,而我们从左到右考虑区间的话,那肯定让左边的人先满 阅读全文
posted @ 2017-08-31 10:11 Blue233333 阅读(185) 评论(0) 推荐(0)
摘要:n<=100000条相等/不等关系描述<=100000个数,把这些数据分割成若干段使得每一段描述都出现冲突且冲突只出现在最后一行。 相等关系具有传递性,并查集维护;不等关系根据相等关系进行合并,采用平衡树的启发式合并。 每次遇到相等关系x,y,先找到x,y对应并查集的根p,q,判是否p在q的不等关系 阅读全文
posted @ 2017-08-13 06:44 Blue233333 阅读(345) 评论(0) 推荐(0)
摘要:给定一棵n<=100000个点的带权树,求树上最长的异或和路径。 “求树上最xx路径”“统计树上xx路的方案数”,本来想用点分的,然后想处理出根节点到每个点的亦或路径时如何统计答案避免判重,突然发现:根节点到A的路径亦或根节点到B的路径就是A到B的路径! 于是预处理(用bfs,避免爆栈)出根节点到每 阅读全文
posted @ 2017-08-10 06:59 Blue233333 阅读(260) 评论(0) 推荐(0)
摘要:n<=100000个数表示每头牛在K<=30种物品的选取情况,该数在二进制下某位为0表示不选1表示选,求一个最大的区间使区间内选择每种物品的牛一样多。 数学转化,把不同状态间单变量的关系通过不等式移项转变为单状态的多变量关系。 sum[i,j]表示前i头牛有多少选了物品j,那么问题要求即对任意j∈[ 阅读全文
posted @ 2017-08-04 10:56 Blue233333 阅读(201) 评论(0) 推荐(0)
摘要:n<=100000个房容量Ai,m<=100000头牛分别要占Li~Ri的房,求能同时满足的牛最多有多少。 先把这些各种各样要求的牛排个序观察一下,可以发现,如果若干头牛的Li是一样的,而Li处的容量不允许它们同时放,这时就要舍弃Ri大的那几头,因为价值相同,舍弃谁都不会影响当前的答案,但Ri大的对 阅读全文
posted @ 2017-07-21 10:58 Blue233333 阅读(174) 评论(0) 推荐(0)
摘要:n个数字中,每个数有数字A和属性B,每次操作将某个点x的属性B改变为0或1,求满足这样要求的子序列的个数: 下标a<b<c<d<e,而Aa<=Ab=Ac=Ad>=Ae且Bb=Bc=Bd=1。 区间操作,首推线段树!(然后就不会了,跑去看别人的代码) 是这样的,重点在于中间那三个点,因为我们的修改操作 阅读全文
posted @ 2017-07-18 00:01 Blue233333 阅读(193) 评论(0) 推荐(0)
摘要:对叠放着的n张牌,第i张牌写有数字Ai,进行操作:将牌堆顶的牌取出,若是当前牌堆最小值就扔掉,否则放到牌堆底,求牌堆空时操作次数。 怎么看怎么像约瑟夫。。不过约瑟夫DP我不太熟,于是就yy了一下 “当前最小值”??优先队列。把Ai和i绑起来扔到优先队列里,就可以知道下一步要跳到哪里。 有个问题:如果 阅读全文
posted @ 2017-07-15 12:05 Blue233333 阅读(278) 评论(0) 推荐(0)
摘要:题目大意:n个数,每个数的权值会传给它左右严格大于它的第一个数,求每个数被传到的权值总和。 题解: 方法一:如果对于某个数,它左右的最大值都≤它自己,那么它左边就不用传;否则就要传给最接近它的大于它的数。由于需要询问最大值,可用RMQ预处理一波,然后二分地查找:若区间内最大值≤那个“它”,该区间就没 阅读全文
posted @ 2016-12-12 12:57 Blue233333 阅读(312) 评论(0) 推荐(0)

上一页 1 ··· 3 4 5 6 7