数据结构
MrBird_to_fly
这个作者很懒,什么都没留下…
展开
-
RMQ(ST表)的一些应用 CF475D&&CF386C
Range Minimum/Maximum Query是指处理多次查询一段区间内最大最小值的算法。ST表可以o(nlogn)预处理,o(1)查询。建表过程如下for(int j=1;j<=19;j++) { for(int i=0;i<n;i++) { if(i+(1<<j)-1<n)原创 2016-07-12 21:07:06 · 919 阅读 · 0 评论 -
Hdu 6155 线段树维护转移矩阵
这个题难点不在线段树上,事实上只要解决了如何求一个01串有多少个不同子串的问题之后,基本上就是一马平川了。所以我队因为不会计数比赛的时候GG了。。。之后围观了叉姐的题解学会了计数,就xjb写完了。#include <bits/stdc++.h>using namespace std;typedef long long ll;const int mod=1e9+7;const int maxn原创 2017-08-20 14:51:24 · 760 阅读 · 0 评论 -
Hdu 6133 启发式合并
今(yi)天(zhi)被NJU(suoyou)的多校虐得满地找牙。。 第一次写启发式合并。。 大概就是大的子树只更新一次,把小的子树往大的里面抽插(233)。。 然后就可以了。。 唯一的问题是我代码能力十分捉急,写出了n个bug。。//启发式合并get//NJU很牛逼啊//这个sumofsum树状数组也很套路啊//我TM好菜菜啊#include <bits/stdc++.h>usin原创 2017-08-17 22:52:36 · 816 阅读 · 0 评论 -
Hdu 6240 01分数规划
这个是CCPC哈尔滨的K题,当时听到隔壁THU卡题少女队说是01分数规划,没学过就弃了。后来发现这玩意挺傻逼的,今天掏出来BB了一顿很快就AC了。 题意: 从一堆[si,ti]的区间中选一部分完全覆盖[1, T], 每个区间有两个权值ai bi, 要求选用的区间的 ∑ai∑bi\frac{\sum ai}{\sum bi} 的最小值。 做法: 先参考一下fjzzq大佬的文章https://www原创 2017-11-14 18:07:29 · 950 阅读 · 4 评论 -
Hdu 5945 bfs+并查集
题意:给x,k,t,求x最快衰减到1的速度。其中x可以减去1-t之间的一个数,k|x时可以除以k。做法:直接搜或者dp都会跪。问题在于已经更新的段被重复访问次数太多。为了避免这个问题,我们从1开始bfs,并且记录每个点所在被更新线段的左端点为他的father,这样bfs更新线段的时候,只需要从father处向左更新,并且做一下类似并查集的维护操作即可,这样每个点只会被遍历一次。代码:#include原创 2016-10-30 20:30:17 · 484 阅读 · 0 评论 -
2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17) A
传送门 训练时候没有考虑到这样一个性质,得到栗子大佬的点拨才看出来:打到的圆一定是左边或右边第一个直径高出射击高度的圆。 如上图,如果点A不落在圆C内却落在圆D内,显然线段AB在圆D内且线段AB与圆C相交,则圆D与圆C相交,不符合题意描述。 再用线段树维护一下即可。#include <bits/stdc++.h>using namespace std;const int maxn=20原创 2017-12-14 15:58:25 · 732 阅读 · 0 评论 -
Zoj 4009 线段树
题意:给定模数99971,在区间上维护两个操作,一个是区间所有数三方,还有一个是区间求和。(均是在取模意义下的操作)做法:注意到348≡1mod99970348≡1mod999703^{48}\equiv 1\mod 99970,则由Fermat小定理,有a348≡amod99971a348≡amod99971a^{3^{48}}\equiv a\mod 99971。于是对于任何一个数,做48...原创 2018-03-10 22:06:52 · 345 阅读 · 0 评论 -
Bzoj 2648 KD-Tree
信仰剪枝喜+1#include <bits/stdc++.h>using namespace std;const int INF=1e9+7;struct node{ int d[2],ma[2],mi[2],l,r;}T[1000003];int rt,n,m,cmp_d;inline bool cmp(node a,node b){ return a...原创 2018-06-30 19:40:19 · 185 阅读 · 0 评论 -
Hdu 5992 KD-Tree
2016 ICPC Qingdao K#include <bits/stdc++.h>using namespace std;typedef long long ll;const ll INF=1ll<<60;struct node{ int d[3],ma[3],mi[3],l,r,id;}T[200003];int rt,n,m,cmp_d;i...原创 2018-06-30 19:45:07 · 268 阅读 · 0 评论 -
CF 600E 树上众数 启发式合并
顺便实现了在每次增减1的情况下,数组最大值的维护。#include &lt;bits/stdc++.h&gt;using namespace std;typedef long long ll;struct edge{ int to,next;}e[200003];int head[100003];int cnt;void init(){ memset(head...原创 2018-07-01 18:16:32 · 423 阅读 · 0 评论 -
长链剖分 Vijos 巴蜀中学 lxhgww的奇思妙想
lxhgww的奇思妙想 长链剖分求K级祖先模板题。疯狂爆栈。。把dfs都加了个inline就过了。。这可能是信仰的力量吧。。#include <bits/stdc++.h>using namespace std;const int maxn=300005;struct edge{ int to,next;}e[maxn<<1];int head[...原创 2018-08-24 15:06:10 · 272 阅读 · 0 评论 -
吉司机线段树2题
在51nod上膜拜了吉司机线段树的直播,写了两个题,分别是hdu5306以及bzoj4355,由于代码能力过于垃圾,每个题都写了两天。 主要思路是用cut对线段树的更新做剪枝,用check控制暴力更新的条件。大概就是区间覆盖或者类似的操作会把区间变得越来越相同,对于把区间变得相同(势能降低?)的操作,完全可以暴力更新,而没有降低势能的操作基本上可以打标记。整个框架如下:void update(in原创 2017-08-13 13:43:46 · 1591 阅读 · 0 评论 -
Bzoj 2038 莫队算法
拖了很久的莫队,直到看到了关于曼哈顿距离的解释才豁然开朗。手撸一个模板自用。#include <bits/stdc++.h>using namespace std;typedef long long ll;int n, m;int c[50500];ll f[50500];int siz;ll up;ll u[50500];ll d[50500];struct que{ in原创 2017-06-24 21:11:15 · 314 阅读 · 0 评论 -
拓扑排序
这两天看了拓扑排序,水了若干题,记录一发。 大概就是记录有向图,和每个点的入度,每次取出一个入度为零的点,并修改以该点为起点的有向边的终点的入度。不断重复以上步骤,直到: 1.取完所有点。此时完成排序。 2.没有入度为0的点,但还有点没取。此时说明图中存在环,非DAG。自写渣渣模板如下:int G[maxn][maxn];int ans[maxn];int indegree[maxn];原创 2016-07-07 21:01:35 · 351 阅读 · 0 评论 -
CF 699D 并查集
D. Fix a Tree time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output A tree is an undirected connected graph without cycles.Let’s consider a root原创 2016-07-20 08:14:18 · 1124 阅读 · 0 评论 -
2015-2016 ACM-ICPC, NEERC, Moscow Subregional Contest K
K. King’s Rout time limit per test4 seconds memory limit per test512 megabytes inputstandard input outputstandard output The great rout will be held this evening in the palace of his majesty Nassa原创 2016-08-29 19:24:27 · 775 阅读 · 0 评论 -
Poj 2299 树状数组
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2016-04-07 15:51:15 · 472 阅读 · 0 评论 -
CF Hello 2015 A ST表模板
A. LCM Query time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard output De Prezer loves lcm (Least Common Multiple).Ha has got a sequence a1, a2, …,原创 2016-10-05 21:44:15 · 572 阅读 · 0 评论 -
CF Hello 2015 C 单调队列解决二维RMQ
C. Subrect Query time limit per test8 seconds memory limit per test512 megabytes inputstandard input outputstandard output De Prezer loves rectangles.He has a n × m rectangle which there is a numb原创 2016-10-07 19:00:25 · 533 阅读 · 0 评论 -
CF 718C 线段树
题意:初始有一个数列ai,更新是给一段同时加上一个值,查询是∑ri=lf(i)\sum_{i=l}^r f(i),其中f(i)是fib数列的第i项。做法:fib数列下标增加k等价于乘转移矩阵的k次方,用线段树维护一下。吐槽:线段树不会写,卡了一万年,对着q巨代码写过了,窝还是太弱了。代码:#include <cstdio>#include <cstring>#include <cmath>#i原创 2016-11-20 10:21:22 · 508 阅读 · 0 评论 -
CF 813F 可撤销并查集+分治
传送门 参考YxuanwKeith的博客和官方题解题意:有n个点,q个操作,每次操作在两个点之间连边,若这两点已有边相连,则删去该边,每次操作后判断是否是二分图。做法:参考的两处讲的很清楚了,主要就是先把查询转化为在某个时间段存在一条线,之后在时间上分治即可。主要还是对分治、并查集按秩合并以及撤销操作要熟练写好不是那么容易。代码还是很精妙的。代码:#include <bits/stdc++.h>原创 2017-06-19 18:20:46 · 737 阅读 · 0 评论 -
可持久化线段树练习题
Bzoj 2653 题目描述: 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整。给你一个 长度为n的序列s。回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c,d]之间的子序列中,最大的中位数。 其中a &lt; b &lt; c &lt; d。位置也从0开始标号。我会使用一些方式强制你在线。#include &lt;...原创 2018-09-16 21:49:27 · 803 阅读 · 0 评论