上一页 1 ··· 4 5 6 7 8 9 10 11 下一页
摘要: 题目链接 思路 对于每一种颜色都建立一个动态开点线段树。然后每次查询的时候就去这个颜色的线段树上查询就行了。修改之后不要忘记交换颜色。 这个题目数据有点强。抄了个比较快的读入优化才卡过去。 代码 cpp / @Author: wxyww @Date: 2018 12 13 08:59:51 @Las 阅读全文
posted @ 2018-12-13 10:02 wxyww 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 机房同传了新的系统,不使用dev的话每次开机都要重新更改环境变量(其实也可以在编译命令里添加绝对路径)。所以就去学习了一下用bat脚本更改path。以便每次开机可以一键更改添加环境变量 其中前面是一些语法,PATH可以更改成其他的变量。后面抄上就行了。$\%path\%$是引用原来的path,然后加 阅读全文
posted @ 2018-12-12 08:03 wxyww 阅读(2239) 评论(0) 推荐(0) 编辑
摘要: 可持久化线段树 可持久化线段树就是支持历史版本的查询和修改的线段树。主席树就是可持久化线段树的一种 思想 如果正常情况下我们想要保留每个历史版本的话。那么假如有n次操作,就要搞n棵线段树。 但是我们发现,第i棵与第i 1棵线段树的大部分节点都是相同的,那么可不可以共用这些节点,从而减小时空复杂度呢。 阅读全文
posted @ 2018-12-11 19:44 wxyww 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 查询区间第k小,考虑主席树。因为是从u到v的简单路径上,考虑将路径分为从u到lca和从lca到v两部分。所以对于每个点都维护出从根节点到当前节点中的点。查询的时候只要用ans[u] + ans[v] ans[lca] ans[fa[lca]]就行了。也就是在主席树的查询代码上略加修改 阅读全文
posted @ 2018-12-11 19:42 wxyww 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 观察这个$(r l + 1)/2$,很容易证明,如果一个数出现次数大于$(r l + 1) / 2$,那么这个区间内第$(r l + 1) / 2 + 1$大一定是这个数。所以只要用主席树查询出区间内第$(r l + 1) / 2 + 1$大,然后再去查这个数在这个区间内出现次数,就 阅读全文
posted @ 2018-12-11 19:33 wxyww 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 裸的主席树。查询的时候,通过相减求出区间内左子树中数的个数a。然后判断要查找的k是否比这个z要大。如果比这个值大,那么就去右子树中查找第k z大,否则去左子树中查找第k大。 代码 cpp / @Author: wxyww @Date: 2018 12 11 16:27:19 @Las 阅读全文
posted @ 2018-12-11 19:26 wxyww 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 听说可以CDQ分治,然后我不会,所以我写树套树 首先肯定先按照a拍个序。然后就成了在b,c这两个数组中查询了。用一个树状数组套treap来维护。当插入一个数的时候,就在树状数组的b这个位置的treap里加入一个c。然后查询的时候就直接把小于等于c的数的个数进行前缀和就行了。 注意题目 阅读全文
posted @ 2018-12-11 14:48 wxyww 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 思想 树套树像他的名字一样,就是一棵树套另一棵树。用一棵外层树来维护一些区间之类的东西。然后外层树的每个节点都是一棵内层树。就这样 一道模板题 bzoj3196 思路 这是一道线段树套平衡树的模板题。外层用一棵线段树来维护区间操作。然后线段树的每个节点都是一棵平衡树 操作1:查询从l到r中比k小的数 阅读全文
posted @ 2018-12-11 10:49 wxyww 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 题目链接 吐槽 这道题调了7个小时也是够了。最后只好比着题解做了一遍2333 思路 首先考虑n=2000的情况。因为这是在一条路径上,所以可以考虑差分。用a[i][j]表示第i个点中j这种粮食出现的次数。加入要在从x到y的路径上加入c这种粮食。将这条路径分为两部分进行差分。从x到lca,也就是将a[ 阅读全文
posted @ 2018-12-10 21:38 wxyww 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 前置知识 权值线段树&动态开点线段树 适用范围 有时候我们需要对权值线段树进行合并操作。然后就用到了线段树合并。一般是有很多棵线段树,然后需要将其中的两棵合并起来。 方法 其实方法很简单呢。就是分三种情况讨论一下。假设现在要将线段树a和线段树b合并。并且a成为合并之后的线段树。 如果a有当前子树,而 阅读全文
posted @ 2018-12-10 21:28 wxyww 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题目大意 有一个矩阵,总共有4种操作 0:清空这个矩阵 1 x y c:将$(x,y)(1 \leq x ,y\leq 10^6)$这个点加上一种颜色c$(0\leq c \leq 50)$(注意是加上,也就是之前的颜色不会被覆盖) 2 x y1 y2:查询左上角为$(1,y1)$,右下角 阅读全文
posted @ 2018-12-10 11:49 wxyww 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 权值线段树 所谓权值线段树,就是指线段树内存的是权值。~~好像是废话~~。给出一些数,要查询一个区间内的数的个数。这时可以用权值线段树,开个n(n为给出的数的最大值)个点的线段树。然后就能轻松的维护了~~当然树状数组更简单~~ 动态开点 为什么要动态开点呢?当然是因为空间不够啊。比如还是上面那个例子 阅读全文
posted @ 2018-12-10 11:33 wxyww 阅读(998) 评论(0) 推荐(1) 编辑
摘要: 题目链接 思路 数学题 首先列出等差数列求和的式子。 $$S = \frac{(n + m)(n m + 1)}{2}(n为末项,m为首项)$$ $$S 2= (n + m)(n m + 1)$$ 若想让m更小,那么肯定要让等差数列中数字的数目更多。也就是让$(n m + 1)$更大,而$(n m 阅读全文
posted @ 2018-12-10 08:57 wxyww 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 set+map+优先队列就可以水过去。可以发现,每插入一个元素,都会使得操作2中原来相邻的那个差值消失,然后多了两个新的差值。对于新的差值,只要直接扔到优先队列里就好了。那么删除呢。可以用map记录一下当前元素被删除了多少次。然后查询的时候将被删除的跳过即可。对于操作3,只要将插入的 阅读全文
posted @ 2018-12-09 21:06 wxyww 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 splay区间操作的裸题。 假如要对l r这段区间操作,那么就先把l 1伸展到根节点,然后把r +1伸展为根的儿子。这样r + 1的左儿子就是要操作的区间了。只要在上面打上标记,以后每次查询的时候pushdown一下。 然后对于l 1和r+1节点可能不存在,所以可以放两个标兵元素。就 阅读全文
posted @ 2018-12-09 11:27 wxyww 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 胡扯 因为先学习的treap,而splay与treap中有许多共性,所以会有很多地方不会讲的很细致。关于treap和平衡树可以参考这篇博客 关于splay splay,又叫伸展树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由Daniel Sleator和Robert Ta 阅读全文
posted @ 2018-12-09 08:22 wxyww 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 可以先考虑一棵树 如图,如果是一棵树我们肯定会想这样子做,但是现在根没有入度。所以现在需要再加入一条边使他变成基环树。 假如现在加入一条边$3 2$,那就会出现一个3 1 2 3的环。然后以这个环上的点为根,就可以找到很多棵满足条件的树 可以发现,这样就解决了根没有入度的问题。 结论 阅读全文
posted @ 2018-12-02 20:42 wxyww 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 因为这些数字是从小到大加进去的,所以以当前数字结尾的最长上升子序列可以从前面位置的任何一个数字转移过来。所以只要能知道每个数字最终位于哪个位置就行了。 没想到出了treap还有什么办法求出来这个序列。看了眼题解发现用vector的insert直接模拟就能过。~~(纳尼?)~~这个函数 阅读全文
posted @ 2018-12-02 18:49 wxyww 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 首先可以证明当这个高度是中位数的时候耗费时间是最少了。所以可以$n^2log(n)$用一个treap预处理出每个区间的中位数。 然后就是知道了中位数怎么计算答案的问题。 然后发现暴力n m的扫能过~~而且跑的还不慢~~ 但是~~作为一个正直善良的OIER~~我还是用$n^2log(n 阅读全文
posted @ 2018-12-02 14:22 wxyww 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 这个题其实就是对于treap中的删除操作进行一些修改。自己yy了一种做法。就是在删除的时候,如果要删除的数比这棵子树的根大,那么就把根变成根的右孩子,这样就相当于删除了整棵左子树和根节点。然后重新维护一下siz,并且维护一下平衡性就行了。 竟然把rotate函数写错了。调了30min 阅读全文
posted @ 2018-12-02 10:12 wxyww 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 比较裸的一道平衡树的题。用一个变量S来表示当前树的情况,当S为负数时树内为宠物,当S为正数时树内为人。然后每次分情况讨论一下。如果树为空或者是与来的东西(人或宠物)与树内存的相同。那么就无法领养,直接将这个东西扔到树里。否则就从树里面找一个与当前值最接近的数字,然后统计进答案。 一开 阅读全文
posted @ 2018-12-01 10:21 wxyww 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 将哪些村庄已经被摧毁了放到treap里。查询的时候如果当前村庄已经被毁了,那么就可以直接输出0.不然就输出这个村庄的后继 前驱 1。原因显然 代码 一言 谁看见过风?我和你,都不曾看见过。 阅读全文
posted @ 2018-11-29 22:03 wxyww 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 模板 只是有几个容易出错的地方 第45行容易忘记 第54行里面的cnt 和siz 容易忘记 第56行是根据id判断不是val 第60行siz 容易忘记 第64行是siz+1不是siz+cnt 第77行和82行等于的情况容易忽略 代码 一言 记忆或会消失,但我的心会记着承诺。 阅读全文
posted @ 2018-11-29 21:56 wxyww 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 平衡树 平衡树就是一种可以在log的时间复杂度内完成数据的插入,删除,查找第k大,查询排名,查询前驱后继以及其他许多操作的数据结构。 Treap treap是一种比较好写,常数比较小,可以实现平衡树基本操作的一种平衡树。treap的平衡是基于随机化。是将堆与二叉查找树结合起来所得到的数据结构。 tr 阅读全文
posted @ 2018-11-29 21:47 wxyww 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 首先肯定要树形dp,一直没想到怎么用左偏树。如果不断弹出又不断地合并复杂度不就太高了。瞄了眼题解才知道可以直接用大根树。然后记录出当前这棵左偏树的大小(树里面所有点的薪水之和)以及点的个数。然后不断的删点。直到薪水满足条件为止。 代码 cpp include include incl 阅读全文
posted @ 2018-11-27 21:52 wxyww 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 题目链接 思路 左偏树的模板题,参考左偏树学习笔记 对于这道题我是用一个并查集维护出了哪些点是在同一棵树上,也可以直接log的往上跳寻找根节点 代码 cpp include include include include include include using namespace std; ty 阅读全文
posted @ 2018-11-27 19:53 wxyww 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 主要应用 首先要知道左偏树是用来干什么的。如果给我们两个优先序列,然后让我把这两个优先队列合并成一个优先队列。如果直接用堆,就是将一个队列里面的数不断弹出然后扔到另一个队列里。复杂度是$O(n)$n为队列中数的个数。但是用左偏树就可以做到$log(n_1 + n_2)$。 PS:为了便于讨论,本文所 阅读全文
posted @ 2018-11-27 19:40 wxyww 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 题面 T1 思路 考虑一下每个数会与其他位置的哪些数字遇到。显然每隔gcd(n,m,k)个数都会遇到一次。所以只要看一下将给出的所有数字全部对gcd(n,m,k)取模是否能包含从0到gcd(n,m,k) 1的所有数就行了。 代码 cpp include include include include 阅读全文
posted @ 2018-11-07 16:25 wxyww 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 题面 T1 思路 直接预处理出两个数组,然后用树状数组维护一下就行了。注意树状数组开两倍空间 代码 cpp include include include include include include include using namespace std; typedef long long l 阅读全文
posted @ 2018-11-06 14:12 wxyww 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 题面 T1 思路 把题目读错了。P[i][j]单调不升我看成单调上升了23333 ~~然后正解是忽略上面这句话?~~然后我就A了??? 用f[i][j]表示前i场赢了j场的概率,那么将当前这一场赢或输分类dp就好了。 代码 cpp include include include include in 阅读全文
posted @ 2018-11-05 15:06 wxyww 阅读(170) 评论(3) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 下一页