bzoj
yxr0105
这个作者很懒,什么都没留下…
展开
-
bzoj1036 树的统计Count 树链剖分 线段树
bzoj1036 树的统计Count 题目大意:树上修改点权 求路径上Max和Sum n<=3w q<=20w 题解:树链剖分上= = 树链剖分 很开心 我的代码要比别人的短= =#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int M原创 2016-01-27 14:39:38 · 452 阅读 · 0 评论 -
bzoj1858序列操作 线段树
题目大意:01序列 可覆盖取反查询区间最长连续1 区间1的个数 BZOJ1858序列操作 记录多个信息 maxlen需要技巧 #滑稽#include<iostream>#include<cstdio>#include<cstring>#define N 100005using namespace std;struct Seg {int l,r,mx[2],ln[2],rn[2],sum原创 2016-05-03 08:00:14 · 363 阅读 · 0 评论 -
bzoj4198 [Noi2015]荷马史诗 k叉哈夫曼树
k叉哈夫曼树 二叉就是贪心,找最小的两个合并,想当年记得是用。。两个数组存的吧。。只是tooyoungtoosimple。。虽然是O(n),优先级队列O(nlogn)。。 k叉的是添加x个w值为0节点,使得最后组成的是每个节点要么是叶子,要么是有k个儿子,数学(?)推导一下即可。#include<iostream>#include<cstdio>#include<algorithm>#in原创 2016-05-15 12:58:57 · 821 阅读 · 0 评论 -
bzoj2049 LCT
裸地LCT……开始学的时候杂七杂八的……自己在网上看了看,感觉理解了大概的意思,又看了看yangzhe的论文,但是操作不全。。然后是zrt讲,嗯,又有了进一步的理解。。不过最后还是啃不知名的神犇的代码搞的。。嗯,写的很简洁。。第一次写,基本等于照抄不会说的。。splay炸了#include#include#define N 200005using namespac原创 2016-05-27 21:00:31 · 393 阅读 · 0 评论 -
bzoj3224 Tyvj 1728 普通平衡树 非旋转式Treap
bzoj3224 Tyvj 1728 普通平衡树 裸平衡树 仔细想想 以前从来没徒手种过树真是羞耻 倒是学过些 但从来没有实现过导致平衡树的一些普通操作开始也是一脸懵逼 普通平衡树的基本操作: rank(x,k): k的子树下 <=x的最大值 的排名 如果当前节点u的data == x 走左子树 更新tmp tmp是刨除重复元素的答案 如果当前节点u的data < x 走右子树 更新原创 2016-04-30 18:15:01 · 749 阅读 · 0 评论 -
bzoj3224普通平衡树 Splay
第一次写Splay 憋了一天累觉不爱 网上关于Splay的资料太少了- -|| http://www.cnblogs.com/kuangbin/archive/2013/04/21/3034081.html 先贴 有空填坑#include<iostream>#include<cstdio>#define N 100005#define inf 1<<30using namespace原创 2016-05-04 19:52:26 · 587 阅读 · 0 评论 -
bzoj3585 mex 分块+莫队算法
题意:一个序列,多组询问,求区间最小没出现过的自然数。(n,m<=100000) 权限题囧 就不敲代码了吧,或者有时间再敲? orz popoqqq 真是太神了 题解:首先考虑询问只有一次怎么做。按权值分块。例如: 1 2 3 | 4 5 6 | 7 8 9 block1|block2 | block3 每块内记录每块内有多少权值出现过(ans1),并记录每个权值出现次数(ans2)。原创 2016-05-05 10:41:09 · 428 阅读 · 0 评论 -
bzoj3196 二逼平衡树 线段树套平衡树
题意:您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查询k在区间内的前驱(前驱定义为小于x,且最大的数) 5.查询k在区间内的后继(后继定义为大于x,且最小的数) 题解:树套树,外层是一棵线段树,每个节点下有一棵平衡树(平衡树记录ls,rs,因此记录根节点就可以遍历整原创 2016-05-08 14:12:18 · 754 阅读 · 0 评论 -
bzoj3223 文艺平衡树 treap
题意:求多次区间反转后的序列 一眼splay,我用了可持久treap实现的。 速度也不错 2008ms 这么想想splay好像没什么用了(大雾@lct#include<iostream>#include<cstdio>#include<cstdlib>#define N 200005#define mp make_pair#define pa pair<int,int>using原创 2016-05-09 08:54:24 · 1229 阅读 · 0 评论 -
bzoj1420 Discrete Root 原根 大步小步 exgcd
题意:模方程xa≡b(modp)x^a \equiv b \pmod p 题目没说。但是此题里p应该为素数。。 1.原根的概念。 对于素数p,如果存在一个正整数1<a<p1<a<p,使得a1,a2,…,ap−1a^1,a^2,\ldots,a^{p-1}模p的值取遍1,2,…,p−11,2,\ldots,p-1一一对应且不重复不遗漏。称a是p的一个原根。 根据欧拉定理可知,ap−1≡1(mo原创 2016-06-12 10:45:48 · 792 阅读 · 0 评论 -
bzoj4517 sdoi2016 排列计数 错排
题目大意:给定n,m。求排列个数,排列满足:1、是全排列的一种。2,、有且仅有m个数a[i] = i。嗯,今天(第一次)听说了个错排这个东西。。诶。不过开心,smz妹子给我讲哒~错排就是求n的排列个数,排列满足不存在a[i] == i。可以递推来完成。f[i]=(i-1)*(f[i-1]+f[i-2])。证明:第i个元素可以选择和某种不满足的情况(i-1个元素,有一个在原位,方原创 2016-05-26 18:50:14 · 598 阅读 · 0 评论 -
bzoj2243 染色 树链剖分 线段树
题目大意:C a b c 将a到b的路径上的点权覆盖为c Q a b 查询a到b的路径上有几段颜色 bzoj2243染色 树链剖分 写的不熟 注意细节#include<iostream>#include<cstdio>#define N 100005using namespace std;struct E {int to,nxt;}edge[N*2];struct T原创 2016-05-03 11:25:56 · 395 阅读 · 0 评论 -
bzoj3289 Mato的文件管理 莫队算法 树状数组
bzoj3289 Mato的文件管理 题目大意: 求静态区间逆序对 n,q <= 50000 首先 莫队算法 传说可以解决一切区间问题的莫队算法……莫队算法 所以有一个比较优雅的替代品。那就是先对序列分块。然后对于所有询问按照L所在块的大小排序。如果一样再按照R排序。然后按照排序后的顺序计算。为什么这样计算就可以降低复杂度呢。 一、i与i+1在同一块内,r单调递增,所以r是O(n)的原创 2016-01-27 14:31:18 · 429 阅读 · 0 评论 -
bzoj1026 windy数 数位dp 记忆化搜索
bzoj1026 题目大意:求[A,B]相邻两位差>=2的个数 1 <= A <= B <= 2000000000 题解: 在网上找了找题解都是用上一种方法(预处理+递推)写的 然而自认为记忆化搜索才是数位dp的通解(勿喷= = 记忆化搜索记录三个变量int dfs(int pos,int pre,bool limit)分别记录 当前位置 前一位数 是否有限制 如果(!limit) 当原创 2016-01-27 14:23:01 · 1169 阅读 · 0 评论 -
bzoj1984 月下“毛景树”树链剖分 线段树
狠狠地吐槽一下csdn不知怎么编辑没保存客服还说没有修改记录尼玛 有空再写吧 题意:动态修改(add)边权 动态覆盖(cover)路径 动态询问路径最大值 N<=100000 题解:首先想象在一个线段上就是个裸的线段树……在树上就链剖嘛 cover和add分两个tag记标记 下传时有点麻烦 有cover的话就先传cover再传add 没有cover的话直接传add(开始没想清楚导致对拍了好久原创 2016-02-05 23:21:49 · 369 阅读 · 0 评论 -
bzoj1305 [CQOI2009]dance跳舞 最大流 二分
bzoj1305 [CQOI2009]dance跳舞 题意:一次舞会有n个男孩和n个女孩。每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞。每个男孩都不会和同一个女孩跳两首(或更多)舞曲。 有一些男孩女孩相互喜欢,而其他相互不喜欢(不会“单向喜欢”)。每个男孩最多只愿意和k个不喜欢的女孩跳舞,而每个女孩也最多只愿意和k个不喜欢的男孩跳舞。 给出每对男孩女孩是否相互喜欢的信息,舞会最多能有几首舞曲原创 2016-01-30 14:45:55 · 520 阅读 · 0 评论 -
bzoj3670 [Noi2014]动物园 kmp
bzoj3670 [Noi2014]动物园 kmp 题意:长度<=100w的字符串 num[i]表示前i个字符组成的字符串中既是前缀又是后缀且前缀后缀不重叠的子字符串个数 求%(1e9+7) 题解:开始看错题了……以为num[i]是既是前缀又是后缀且前缀后缀不重叠的最长子字符串长度……翻题解没弄懂他们的方法……自己yy一个没敢写呢仔细一看题卧槽……这个事情告诉我们仔细看样例啊…… num[i]原创 2016-01-31 22:22:17 · 551 阅读 · 0 评论 -
bzoj3173 最长上升自序列 块状链表
题意:动态插入数,求每次插完后的最长上升自序列长度。(N<=100000) 动态插入部分 块状链表 块状链表: split:分裂 O(sqrt(n)) merge:合并 O(sqrt(n)) insert:插入 具体做法是找到对应的块O(sqrt(n)),在该块内找到对应的点O(sqrt(n))split,merge(first,now),merge(now,second) mainta原创 2016-05-10 17:01:55 · 904 阅读 · 0 评论 -
bzoj3173 [Tjoi2013]最长上升子序列 dp Treap
bzoj3173 [Tjoi2013]最长上升子序列 题意:依此插入1-n 求每插完一次的LIS 分析:每个数是按照升序插入的,因此每新加入一个数,不会影响之前的答案,那么我们就可以求出最后的序列,这样我们可以求出以每个数为结尾的LIS,那么答案 ans[i]=max(ans[i],ans[i-1]). LIS现学的囧……理解是挺好理解的……实现囧…… d[len]:长度为len的LIS的结原创 2016-05-03 17:52:10 · 446 阅读 · 0 评论 -
bzoj1483[HNOI2009]梦幻布丁 链表启发式合并
题意: 有两个操作 1、将所有的x改成y 2、求序列的颜色段 如1 2 2 1 ans=2(m<=1000000) 首先,可以求出初始序列的ans,然后每次修改颜色相当于合并两个颜色,启发式合并。 启发式合并就是将sz小(s1)的暴力加入sz大的(s2),因为sz[s1]至少翻倍,至多翻倍至totsz,所以复杂度是O(logn)#include<cstdio>#include<algor原创 2016-05-05 17:59:02 · 827 阅读 · 0 评论 -
【模版】bzoj1857[Scoi2010]传送带 三分套三分
题意:平面内有两条线段,在两条线段上的速度v1,v2,其他地方速度为v0,求从一条线段起点到另一条线段的终点的最短时间。 题解:从一个点出发到另一条线段的终点的时间是凹函数(证明略。三分套三分。第一次三分第一条线段上的点,第二次三分出经过这个点的ans最小值。#include<cstdio>#include<iostream>#include<cmath>using namespace st原创 2016-05-13 14:07:44 · 427 阅读 · 0 评论 -
bzoj4198 [Noi2015]荷马史诗
题意:k叉哈夫曼树 题解:2叉哈夫曼树的做法我们知道后,k叉哈夫曼树就是每次找前k小的。但是现在的问题是可能有非满叉结点。考虑到非满叉结点一定是在最后一层,所以只需要补x个0即可。推一推知道是x = k - 1 - (n - 1) % (k - 1)。#include<bits/stdc++.h>#define ll long longusing namespace std;struct N原创 2017-11-17 19:49:48 · 277 阅读 · 0 评论