线段树
make_it_for_good
这个作者很懒,什么都没留下…
展开
-
bzoj 1513 树套树
题意:每次把坐标系上的一个矩形内的权值修改成矩形内最大权值+w。求最后最大权值。二维线段树,但外层数据结构既不能pushup(总不能重构内层树吧?),也不能pushdown(两个标记不能相加)。我草,那怎么办?标记永久化,打两种标记,第一种标记对经过的每一个点一路打下来,查询时精确查找。第二种标记恰好相反。那么对于查找的区间在标记区间之上的情况会查到第一种标记,在标记之下的情况会查到第二种标记。话说原创 2016-09-10 15:23:49 · 392 阅读 · 0 评论 -
codeforces 700E 后缀数组
题意:定义a串比b串优当且仅当a串中至少包含两个b串(可以重叠),给出一个串w,求一个最长的由w的子串构成的序列,满足第i个串比第i-1个串优。题解后缀自动机没看懂,看了评论中的一个后缀数组做法。定义一个串是好串当该串长度为1或该串的前缀和后缀都有同一个好串且该好串不出现在该串中间。 那么对于每一个后缀取一个最长的是后缀前缀的好串,最终答案一定由这些好串组成。从n到1枚举求是当前串前缀的最长好串,原创 2016-08-20 13:39:06 · 1297 阅读 · 0 评论 -
bzoj 4388 线段树
题意:有A个男生B个女生。n个条件,第i个条件为b1ib1_i到e1ie1_i的男生和b2ib2_i 到 e2ie2_i 的女生这些人中任意一个人都可以邀请其他人,并且通过这个关系邀请一个人的收益为viv_i。一开始男生C被邀请,求邀请到所有人的最大收益。这就相当于一个最大生成树,因此答案和C无关。将区间A,B分别离散化,每个离散化后的区间只需要一个点和外界相连,其他点都可以用经过这段区间的所有条件原创 2016-08-24 08:41:41 · 703 阅读 · 0 评论 -
CodeChef COT5 线段树
CodeChef COT5 线段树题意给出一些点,每个点有一个权值和键值,将这些点建成一个treap,支持插入一个点,删除一个点,询问两点之间的距离。首先考虑怎么建树,将所有点按键值从小到大排序,每次从当前区间找出权值最大的点,作为当前子树的根,该点左边的点建成左子树,右边的点建成右子树。把所有点离线下来,按键值排序,树上两点的lca就是在序列上两点之间的权值最大的点。找到lca后求两点距离就只需原创 2016-08-11 20:43:44 · 792 阅读 · 0 评论 -
bzoj 3166 [Heoi2013]Alo 可持久化trie 线段树
先对序列建一个可持久化trie。 然后从大到小将元素插到线段树对应位置。 每次插入前求以该元素为此小值的最大答案 (求该元素在线段树中前驱的前驱+1和后继的后继-1,中间的部分与该元素的最大异或和就是答案) 最大异或和从可持久化trie上查询。#include <bits/stdc++.h>using namespace std;#define N 51000#define M 110原创 2016-10-25 10:22:07 · 234 阅读 · 0 评论 -
bzoj 1949 [Ceoi2006]Walk dp 线段树
woc这题做得蛋疼。。。 一开始自己yy了一下,发现一个矩形到另一个矩形的转移一定是从一个的左上/左下角走到另一个的左上/左下角。如图: 然后设f[i][0/1]f[i][0/1] 表示原点到第i个矩形左上/左下角的最短路。 然后按左边界排序,从右往左扫一遍维护每个矩形的左上/左下角向右到达的第一个矩形。 然后再更新一下可以直接从原点走到的矩形的f值。 但问题是无法确定最后一个矩形的左原创 2016-12-01 20:58:38 · 572 阅读 · 0 评论 -
bzoj3531 [Sdoi2014]旅行 树链剖分 线段树
先树剖,然后对于每个值开一个动态开点的线段树。#include <bits/stdc++.h>using namespace std;#define N 110000#define M 11000000#define ls l,mid,ch[now][0]#define rs mid+1,r,ch[now][1]int n,q,tot,cnt;int w[N],c[N],head[N]原创 2016-11-22 20:34:43 · 366 阅读 · 0 评论 -
bzoj 2402 陶陶的难题II 01分数规划 树链剖分 线段树维护凸包
先01分数规划一下,然后这个东西就是求(qj−kpj)+(yi−kxi)(q_j-kp_j)+(y_i-kx_i) 的最大值。 把qi−kpiq_i-kp_i 和yi−kxiy_i-kx_i分开考虑,这是一个斜率的式子,只会取上凸包的点。因此树剖把这个东西放到线段树上,线段树每个节点维护一个凸包。 然后求的时候三分就行了。 虽然这个东西看起来是log4log^4 的,不过01分数规划如果用迭代原创 2016-12-29 18:07:13 · 992 阅读 · 0 评论 -
bzoj 3519 线段树
题意说的什么jb玩意 写完之后我都开始怀疑人生了。。。每行每列开个线段树,维护加点删点找前驱后继(好像可以set) 第一问找询问的点两个方向的第一个点,看是不是相同颜色。 第二问把一开始能选的放进一个队列,然后每删除一个点只会影响到上下左右第一个点的答案。 一坨判断#include <bits/stdc++.h>using namespace std;#define N 110000#原创 2017-03-11 15:49:13 · 598 阅读 · 0 评论