数据结构
文章平均质量分 81
MoeO3
这个作者很懒,什么都没留下…
展开
-
【Splay】【离散化】hdu3436 Queue-jumpers
写的最恶心的一个离散化orz……splay的操作其实很简单 用treap也可以写。。因为N太大必须离散化 = =把 T 和 Q 操作的数字给提出来 然后其他的保存区间 我写的比较orz我是直接把每个操作的节点的地址给保存了 = =T操作:把操作节点提根 然后右子树最小的儿子提到根节点的右儿子 把根节点的左儿子接到右儿子上(删除根节点)然后再把操作节点插入到前面那个哨兵的后面 再原创 2015-02-25 12:39:27 · 781 阅读 · 0 评论 -
【主席树】poj2104 K-th Number && poj2761 Feed the dogs
这两道题。。似乎是一样的。。。 = =(我才不会说其实最开始是想交2104结果交城2761结果还Accept了。。。)就是个主席树模板题。。静态区间第k大。。其实用整体二分写的话更方便的。。不过无所谓了。。。反正学学高端的CMT嘛……其实思路和整体二分也差不多的啊QAQ离散化一下然后用权值建线段树。。就是从前往后依次把树加入线段树 每次加入的时候新建这条链上的节点。原创 2015-04-09 18:51:42 · 628 阅读 · 0 评论 -
【线段树】Codeforces 437B The Child and Set
题目点这里vfk大大讲过的 = = 记录一个最大值然后暴力搞就行了。。。最开始WA了一次是因为Modify没更改最大值。。#include #include #include using namespace std;const int Nmax = 1e5 + 5;int N, M;int a[Nmax];#define lc (u << 1)#原创 2015-04-16 22:38:39 · 652 阅读 · 0 评论 -
【并查集分块】Codeforces 475D CGCDSSQ
题目点这里bin神说这题和他当年出的一道题差不多TAT听了半天终于听懂了TAT。。。利用gcd的递减性 从左往右把一段的gcd和最新的数相同的的放到一个并查集里去。。可以证明段数是不会增加的 = =#include #include #include using namespace std;const int Nmax = 1e5 + 5;int原创 2015-04-16 22:41:12 · 913 阅读 · 0 评论 -
【双Treap】[Scoi2014] bzoj3595 方伯伯的Oj
题目点这里 原来的题解点这里 。。Treap+Map写的。。。。。然后听说scoi的评测鸡很傲娇。。。。当场是卡了map的。。。。所以我就重新写了双Treap。。。一个维护编号一个维护排名。。。。。。叫bzoj比map慢了几十ms = =因为有-O2?rank3是的评测结果 rank4和rank5目测都是直接交的我的代码吧 = =||||然后rank6就是这份代原创 2015-04-10 12:07:46 · 1444 阅读 · 0 评论 -
【参考代码】mz线段树基本操作训练
QAQ为什么高一小朋友们的题都这么难。。代码仅供参考,禁止照抄哦 = v =说明一下:read()函数是读入优化,你们直接写scanf就行了。namespace只是为了封装,可以不要。然后我线段树的姿势可能和你们老师讲的不太一样,个人觉得这样写起来简洁一些,而且效率高。Promble A原题是hdu1166。简单的点修改和区间查询。因为太水了我就写的树状数组 =原创 2015-05-06 17:04:34 · 870 阅读 · 0 评论 -
【线段树】spoj GSS2 Can you answer these queries II
写了三个小时的线段树也是醉了 = =PushDown手贱了一下于是一直23333#include #include #include #include #include using namespace std;const int maxN = 100005;#define lc (u << 1)#define rc (u << 1 | 1)namespace原创 2015-07-27 12:53:28 · 966 阅读 · 0 评论 -
【扫描线】【线段树】UVa11983 Weird Advertisement
各种暴力 #include #include #include #include using namespace std;const int Lmax = 60005;struct Line { int x, down, up; int cover; bool operator < (const Line &b) const { return x原创 2015-07-27 12:57:56 · 803 阅读 · 0 评论 -
【Treap】poj1442 Black Box
七月了。NOI也结束了。题目点这里题意:有个黑箱子。有两个数组A[1...N] Q[1...M] 其中A数组表示依次往黑箱子里加入A[i]这个数 Q[i]表示在加入了A[Q[i]]以后查询箱子里第i大的数正解大概不是treap。。不过也就80行。。。#include #include #include using namespace std;co原创 2015-07-21 20:18:57 · 1065 阅读 · 0 评论 -
【记录】绵东实三校联考 验题记录
感觉已经快成御用验题小天使 = =。。姜神出的题,然后cyx小朋友成功AK了 【T1】 排队 Waiting这题和之前有一道NOIp题差不多。。做法也是一样的。。排个序就万事大吉了。听说有人最后计算结果的时候少算了b,然后出了点儿事。。。 #include #include #include #define Mod 1000000009llusi原创 2015-11-04 16:53:55 · 1357 阅读 · 0 评论 -
【倍增】【set】[NOIP2012] codevs1199 开车旅行
题目点这里这题的复杂度基本就在预处理找在每个点A、B分别要开去哪上面了 = =倍增其实很水……用set维护高度。因为只能从前往后,所以从后往前插入,然后取其前两个和后两个用他们之间的距离排个序,距离最小的是B去的地方,第二小是A去的地方。记A+B各开一次为一轮。然后令f[i][j]为从i出发,开了2^j轮去了哪。fa[i][j]、fb[i][j]分别表示从a、b出发走2^j轮后原创 2015-10-18 00:15:33 · 2418 阅读 · 0 评论 -
【树链剖分】【最大生成树】[NOIP2013]codevs3287 货车运输
题目点这里嗯……我知道正解是LCA倍增……但是补这个题的时候第一反应就是树剖,于是我就愉快地写树剖了……用树剖的话复杂度会多一个log不过常数写的小点话几乎可以忽略不计。代码量比正解大那么1000k的样子……毕竟有个线段树还有两个dfs先用kruskal建个最大生成森林出来,然后把每棵树剖分一下就行了。线段树可以用一个,因为互相不影响#include #inclu原创 2015-09-27 11:05:59 · 1607 阅读 · 4 评论 -
【线段树套线段树】[ZJOI 2013] bzoj3110 K大数查询
被浙江的省选题真的搞得要疯了= = 那种又饿又冷又码不出代码的感觉简直是…………无!法!言!喻!树套树本来是打算先放着之后再说的……orz现在看来是必须先攻破惹。。虽然估计换道题窝又不会了 = = 自己太弱要怎么办嘛。。。然后想说 发现我的博客名取的还真是好 = = 。。。Description有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式原创 2015-02-10 11:12:28 · 1581 阅读 · 4 评论 -
【Treap】[Scoi2014] bzoj3595 方伯伯的Oj
题目点这里 这道题见证了什么叫做一时手贱千古恨 :) 强制在线的离散化 想写对拍都不容易orz用了各种乱七八糟的查错方法终于知道错哪了!!!orz交了bzoj拿了rank3 指针写比鲲哥快哈哈哈哈 当心理安慰吧 = =。。纪念我被这道题挫伤的小心脏啊。。。这题维护序列。。用splay挺好的 treap也行直接把它的“排名”当做排序关键字就行了(提到前面的就是负的原创 2015-03-12 13:52:01 · 1463 阅读 · 0 评论 -
【splay】[noi2005] bzoj1500 维修数列
hehehehehehehehehehe这道题我已经没有什么想说的了zsl告诉我这道题他写的时候被恶心惨了 其实我写的时候觉得还蛮好写的 因为之前差不多的线段树的题写好以后本机测cena全挂 然后姜神帮窝在linux下测一组wa两组卡过 因为哨兵没有特殊考虑orz。。。然后交OJ!最开始没写回收空间!!!于是我就开了很大的空间!!!并没有MLE!!!!一直告诉我TLE!我把main函数原创 2015-02-28 17:40:13 · 644 阅读 · 0 评论 -
【小结】树状数组的区间修改与区间查询
第一次听到树状数组是zsl来讲课QAQ 然后当时他给我们绕了很久 = = 嗯没懂…………结果后来发现这东西实际上是个简单又好用的玩意QAQ[ 1 ] 树状数组的本职是单点修改+区间查询 维护前缀和 每次修改向上传数据 然后查询区间的时候也是从下往上加值 函数很好写……修改:void update(int i, int x){ while(i <= N){原创 2015-02-26 21:46:50 · 17666 阅读 · 6 评论 -
【资料】个人对主席树算法的理解
首先借主席树发明人的一段话:..这个东西是当初我弱不会划分树的时候写出来替代的一个玩意..被一小撮别有用心的人取了很奇怪的名字> <想法是对原序列的每一个前缀[1..i]建立出一颗线段树维护值域上每个数的出现次数,然后发现这样的树是可以减的,然后就没有然后了转载请注明出处,谢谢。http://blog.csdn.net/sprintfwater/article/details/916转载 2015-03-04 07:46:56 · 514 阅读 · 0 评论 -
【资料】树链剖分学习
专题训练:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28982#overview 树链剖分并不是一个复杂的算法或者数据结构,只是能把一棵树拆成链来处理而已,换一种说法,树链剖分只是xxx数据结构/算法在树上的推广,或者说,树链剖分只是把树hash到了几段连续的区间上。学习链接:入门:h转载 2015-03-04 07:27:47 · 411 阅读 · 0 评论 -
【树分治】poj1741 Tree
题目点这里 感觉分治没有剖分好写。。orz有个地方绕了好久。。。漆子超的论文里解法写的挺详细的:记Depth(i)表示点i到根结点的路径长度,Belong(i) X ( X 为根结点的某个儿子,且结点i 在以X 为根的子树内)。那么我们要统计的就是:满足 Depth(i) + Depth( j)K 且 Belong(i) != Belong( j) 的(原创 2015-03-10 09:55:30 · 411 阅读 · 0 评论 -
【树链剖分】spoj375 Query on a tree
题目点这里_(:з)∠)_树链剖分の水题。。。也当练代码就好了。。。。交这道题交了我半个小时。。。再也不玩外国的oj了。。。。。。#include #include #include #define lc (u << 1)#define rc (u << 1 | 1)using namespace std;int read(){ int sign原创 2015-03-10 14:07:28 · 410 阅读 · 0 评论 -
【树链剖分】重建
树剖裸题 = =单纯为了纪念一下我7K的代码#include #include #include using namespace std;int read(){ int n = 0, sign = 1; char c = getchar(); while(c '9') { if(c == '-') sign = -1; c = getchar(); } while原创 2015-03-29 17:29:23 · 426 阅读 · 0 评论 -
【Splay|Treap】poj3580 SuperMemo && bzoj1503 [noi2004]郁闷的出纳员
splay真的是一种十分耐吃的植物。啃了三四天终于啃熟了 orz 当然现在还仅限于模板题T T 很多东西还是要努力啊!!!debug的过程真的是十分的艰辛orz 找了毕克大魔王他说叫我再想想QAQ。。。。。。。。。好吧反正最终!还是顺利地完成了!两道题都是写了三遍代码啊我已经快上瘾了!!!!(虽然依旧写的丑orz)SuperMemoTime Limit: 5000M原创 2015-02-22 23:38:50 · 599 阅读 · 0 评论 -
【ac自动机】uva11468 Substring && uva11019 Matrix Matcher
终于有勇气来切zsl给的题……似乎是书上的原题…………很久没写ac自动机。。手生。。。然后因为splay爱上了指针 = =所以ac机也是作死用指针写的……(小明:用指针写ac机最容易挂了)题挺水的 只要想到状态定义就没啥问题了 写记忆化搜索…………最开始prob数组没有清零wa了很久orz题目点这里 (英文渣真的要哭了)题意:给出一些字符 每个字符对应一个出现的概率 随机选原创 2015-02-27 17:42:34 · 507 阅读 · 0 评论 -
【AC自动机】西征罗马之路
水题再没有爱了。。。#include #include #include using namespace std;int read(){ int n = 0, sign = 1; char c = getchar(); while(c '9') {if(c == '-') sign = -1; c = getchar(); } while(c >= '0'原创 2015-04-10 18:43:13 · 787 阅读 · 3 评论 -
【线段树】line
。。水题。。。#include #include using namespace std;int read(){ int n = 0, sign = 1; char c = getchar(); while(c '9') {if(c == '-') sign = -1; c = getchar(); } while(c >= '0' && c <= '9') { n原创 2015-04-10 18:45:34 · 488 阅读 · 0 评论 -
【整体二分】[ZJOI 2013] bzoj3110 K大数查询
题目点这里树套树题解点这里调完这个。。一晚上居然就又过去了。。。TAT先说下效率 我的树套树是283136 kb 7556 ms(永久化标记的)分治是3148 kb 1296 ms_(:з)∠)_代码长度的话。。两个都差不多T_____T思路:整体二分这玩意。。和cdq分治挺像的样子。。从我的理解来说。。。cdq分治是用[l, mid]更新[mid原创 2015-04-06 21:54:49 · 4587 阅读 · 8 评论