博客园 首页 私信博主 显示目录 隐藏目录 管理 动画
摘要: "题目链接" 还是80分,不是很懂。 cpp / 七个操作(用左偏树)(t2表示第二棵子树): 1.合并:直接合并(需要将一个t2中原有的根节点删掉) 2.单点加:把这个点从它的堆里删了,加了再插入回去(有负数)(它可能成为这一个堆的根,所以也要从t2中删除再插入) 3.整个连通块加:根节点打标记( 阅读全文
posted @ 2018-02-09 13:18 SovietPower 阅读(165) 评论(0) 推荐(0) 编辑
摘要: "题目链接" "左偏堆学习 推荐" cpp include include include define gc() (SS==TT &&(TT=(SS=IN)+fread(IN,1,1val[B]||(val[A]==val[B]&&A B)) std::swap(A,B); son[A][1]=M 阅读全文
posted @ 2018-02-09 13:15 SovietPower 阅读(184) 评论(0) 推荐(0) 编辑
摘要: "题目链接" cpp //注意树剖一条链上或一棵子树内的编号是连续的 //建树时用的是第二次dfs得到的序列 //不要频繁转longlong include include include // define gc() getchar() define gc() (SS==TT&&(TT=(SS=I 阅读全文
posted @ 2018-02-09 13:14 SovietPower 阅读(147) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 阅读全文
posted @ 2018-02-09 13:11 SovietPower 阅读(183) 评论(0) 推荐(0) 编辑
摘要: "题目链接" st(n)表示sqrt(n) 为使块状链表不会退化,通常将每块的大小S维持在[st(n)/2,2st(n)]中,这样块数C也一定[st(n)/2,2st(n)]中 在此使用另一种方法(方便)维持这种性质:保证任意相邻两块的size相加 st(n),并且每块大小 include incl 阅读全文
posted @ 2018-02-09 13:10 SovietPower 阅读(477) 评论(0) 推荐(0) 编辑
摘要: "题目链接" Update:这种分块写法...可以被卡掉啊... 好像没有靠谱的树分块写法... cpp / 对树上节点进行分块,每个点记录dep,fa,val,Max,Sum,Max,Sum表示当前点在该块内的子树中权值最大值与和 节点i各值表示从root[i]到i一段路径的的对应值。因为求值时应 阅读全文
posted @ 2018-02-09 13:08 SovietPower 阅读(187) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 洛谷上惨遭爆零是为什么。。 另外这个树分块算法是假的。 cpp / 插入删除只涉及一个数,故每次可以枚举一遍,而不是重构完后sort / include include include include define gc() getchar() const int N=6e4+5; c 阅读全文
posted @ 2018-02-09 13:07 SovietPower 阅读(176) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 第一次写(2017.11.7): 第二次写(2017.12.3): cpp include include const int N=1e5+5; int n,root,size,sz[N],cnt[N],t[N],son[N][2],fa[N]; inline int read() { 阅读全文
posted @ 2018-02-09 13:05 SovietPower 阅读(150) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 查找排名为k的数用平衡树 合并时用启发式合并,把size小的树上的所有节点插入到size大的树中,每个节点最多需要O(logn)时间 并查集维护连通关系即可 O(nlogn insert time) 据(主席)说按顺序插入能做到均摊O(1),中序遍历即可有序插入 1.并查集与平衡树是独 阅读全文
posted @ 2018-02-09 13:02 SovietPower 阅读(206) 评论(0) 推荐(0) 编辑
摘要: "题目链接" cpp //模板吧 include include include using namespace std; const int N=40000,INF=1e8; int n,size,root,sz[N],cnt[N],t[N],son[N][2],fa[N]; inline int 阅读全文
posted @ 2018-02-09 13:01 SovietPower 阅读(109) 评论(0) 推荐(0) 编辑
摘要: "题目链接" cpp / BZOJ1503: 3164kb 792ms/824ms(新建节点) 洛谷 : 3.06mb 320ms/308ms(前一个要慢wtf 其实都差不多,但前者好写) 四种操作: A:所有元素加v。直接TAG+=v即可 S:所有元素减v。TAG =v,如果TAG0,可是v已经要 阅读全文
posted @ 2018-02-09 12:59 SovietPower 阅读(183) 评论(0) 推荐(0) 编辑
摘要: "题目链接" or "Here" 题意:n个数,有两个操作:1.修改某个数为v;2.询问一段区间第k小的数 如果没有修改,则可以用线段树,每个节点P[a,b]存储大小为b a+1的数组,代表其中的数 同时,这个数组还是要排好序的 直接找答案很不方便,于是考虑对数组二分答案,求比它小的数的个数 关于构 阅读全文
posted @ 2018-02-09 12:56 SovietPower 阅读(274) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 附纯SplayTLE代码及主要思路: cpp / 可以看做序列有n段,Insert是每次在每一段最后插入一个元素 只有插入,没有删除,所以插入一个元素对于询问1影响的只有该元素与前边一个元素(同段)、下一段的开头元素 故只需删掉该段最后元素与下一段开头元素的差,再加入新元素与下一段开头 阅读全文
posted @ 2018-02-09 12:51 SovietPower 阅读(198) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 阅读全文
posted @ 2018-02-09 12:49 SovietPower 阅读(194) 评论(0) 推荐(0) 编辑
摘要: "题目链接" cpp / 任意组合土地好像很难DP 对于同一组,价值为max{ai} max{bi},显然长宽都小于这个的土地是不会算入结果的 由于是都买,所以所有会被包含的土地都不会算入结果 先按Ai、Bi升序排序,第一关键字Ai,那么对于B[i 1] include include define 阅读全文
posted @ 2018-02-09 12:47 SovietPower 阅读(141) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 2017.12.24 第一次写: 时间: 2316ms (1268ms) 空间: 19.42MB (19.5MB)(O2) 注:洛谷测的时间浮动比较大 2018.2.26 第二次写: (简化许多)(两份实际行数倒差不多) 时间: 2008ms (1536ms) 空间:19.51MB ( 阅读全文
posted @ 2018-02-08 16:00 SovietPower 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 题目链接 //注意反转时先分裂r,因为l,r是针对整棵树的排名 #include<cstdio> #include<cctype> #include<algorithm> //#define gc() getchar() #define gc() (SS==TT&&(TT=(SS=IN)+fread 阅读全文
posted @ 2018-02-08 15:58 SovietPower 阅读(225) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 第一次(2017.12.24): cpp include include include // define gc() getchar() define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF: SS+ 阅读全文
posted @ 2018-02-08 15:57 SovietPower 阅读(282) 评论(0) 推荐(0) 编辑
摘要: $For Study$ wolfram alpha(手机APP:wolfram alpha app可以免费查看过程) OEIS(在线整数数列查询网站) GeoGebra(解方程,画函数图像,绘制图形,分析数据,探讨3D数学!) 在线绘图 绘制函数图像:https://www.desmos.com/c 阅读全文
posted @ 2018-02-08 15:17 SovietPower 阅读(247) 评论(1) 推荐(1) 编辑
摘要: 题目链接 \(Solution\) 注: 刚学 可能过程有疏漏,仅供参考(其实我不是很懂这里是否需要证决策单调)。 (当然不用斜率表示用推式子的方法解已经不太合适了。。) 抽象下问题,即将一个序列分成任意多段,设$f[i]$表示以$i$作为一个右端点时$[1,i]$的最小值,则$f[r]=f[l]+ 阅读全文
posted @ 2018-02-08 09:19 SovietPower 阅读(150) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 斜率优化 不说了 网上很多 这的比较详细 " Click Here " or "Here" 阅读全文
posted @ 2018-02-07 18:03 SovietPower 阅读(169) 评论(2) 推荐(0) 编辑
摘要: "题目链接" $Description$ 给定一个$n$个数的序列,最多将序列分为$m+1$段,每段的价值是这段中所有数两两相乘的和。求最小总价值。 $Solution$ ~~写到这突然懒得写了。。~~ 丢个 "题解" ~~走人~~ cpp / 朴素O(n^3):f[i][j]表示当前在i分了j段的 阅读全文
posted @ 2018-02-07 17:22 SovietPower 阅读(150) 评论(0) 推荐(0) 编辑
摘要: "题目链接" $Description$ 一棵n个点的树,每次可以选择树上两个叶子节点并删去一个,得到的价值为两点间的距离 删n 1次,问如何能使最后得到的价值最大,并输出方案 $Solution$ 树上距离,求最大,可以考虑下树的直径 假如已知树的直径u v,那么任意一点x到达其他点的最远距离就是 阅读全文
posted @ 2018-02-07 15:06 SovietPower 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 选$k$段不相交的区间,使其权值和最大。 阅读全文
posted @ 2018-02-07 11:26 SovietPower 阅读(524) 评论(0) 推荐(0) 编辑
摘要: "题目链接" cpp / 每一天的餐巾需求相当于必须遍历某些点若干次 设q[i]为Dayi需求量 (x,y)表示边x容y费 将每个点i拆成i,i',由i' T连(q[i],0)的边,表示求最大流的话一定要流满q[i] 对于i,由S i连(q[i],0)的边,表示满足Dayi需求后最多还能给出q[i] 阅读全文
posted @ 2018-02-06 16:49 SovietPower 阅读(134) 评论(0) 推荐(0) 编辑
摘要: "题目链接" cpp / 同"修车":对于每个厨师拆成p个点表示p个时间点,每个人向m个厨师每个时间点连边 这样边数O(nmp)+网络流 ≈O(nm p^2)(假设SPFA线性) = GG 可以发现这O(nmp)条边大多数是用不到的 所以可以只建少量边,每增广一条路加O(n)条边 复杂度就是O(nm 阅读全文
posted @ 2018-02-06 15:49 SovietPower 阅读(176) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 上下界费用流: 最小路径覆盖: 阅读全文
posted @ 2018-02-06 14:20 SovietPower 阅读(160) 评论(0) 推荐(0) 编辑
摘要: "题目链接" cpp / 神tm看错题 2。。 假如人员i依次维修W1,W2,...,Wn,那么花费的时间是 W1 + W1+W2 + W1+W2+W3... = W1 n + W2 (n 1) + ... + Wn 1 即车j是第a个修的 产生的贡献是(n a+1) t[i][j] 车j是倒数第a 阅读全文
posted @ 2018-02-06 09:27 SovietPower 阅读(138) 评论(0) 推荐(0) 编辑
摘要: "题目链接" cpp //裸最大权闭合子图... include include include define gc() getchar() const int N=55005,M=N 阅读全文
posted @ 2018-02-05 18:05 SovietPower 阅读(129) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 最小化最大的一条边,二分答案。然后就变成了给一张无向图定向使其为欧拉回路 二分答案后对于一个位置的两条边可能都保留,即双向边,需要给它定向;可能只保留小的一条,即单向边,不需考虑 如何给它定向呢,或者说怎么形成欧拉回路呢 形成欧拉回路的充要条件:弱连通图;每个点出度=入度 记点i的度数 阅读全文
posted @ 2018-02-05 17:41 SovietPower 阅读(142) 评论(0) 推荐(0) 编辑