上一页 1 ··· 5 6 7 8 9 10 11 12 13 14 下一页
摘要: 自己写的第一颗splay。http://acm.hdu.edu.cn/showproblem.php?pid=3487 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn = 3e5 + 1... 阅读全文
posted @ 2015-10-03 17:00 astoninfer 阅读(131) 评论(0) 推荐(0) 编辑
摘要: http://www.lydsy.com/JudgeOnline/problem.php?id=1588splay bottom-up的数组实现。题意就是给你一组数,求每个数与在其前面且与其最相近的数的差值的绝对值。考虑splay二叉搜索树的特性,每新插入一个节点,比它小且最靠近它的数在是左子树中的... 阅读全文
posted @ 2015-10-02 19:15 astoninfer 阅读(153) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2823单调队列: 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn = 1e6 + 10; 6 int a[maxn]; 7 int n, k;... 阅读全文
posted @ 2015-09-29 10:50 astoninfer 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 维护一个动态序列。给定前k的数的一个排列σ(1)...σ(k),表示第k个人占据当前序列的第σ(k)位置。考虑将第k+1个人插入到原序列的第p位(其中p≤ k),后面的人向后各移动一位。线段树的叶子节点表示静态序列此处位置对应当前动态序列的位置序号。从后往前不断寻找合适位置再更新即可。对于重复元素只... 阅读全文
posted @ 2015-09-28 17:31 astoninfer 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 题意就是给你一张无向连通图,试问对于图上所有点对(u,v)从u到v的所有路径中边权最大值的最小值的最大值。定义f(u,v)表示从u到v所有路径中边权最大值的最小值,对所有点对取其最大。实际上就是求图G的最小生成树的最大边权。考虑kruskal算法流程,每次选取边权最小的且不产生圈的边加入mst。至算... 阅读全文
posted @ 2015-09-28 14:50 astoninfer 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 此题不难却易出错,很能考察思维的严谨性。指定ll为区间内左端顶格数的连续可利用房间,rr为右端顶格数的数值,mm为区间内最长的连续可利用房间数。在查询的时候,由于要返回最靠左的区间左端点,使得在该点右侧有长为l的可利用房间数。那么首先有解存在当且仅当区间mm值大于等于给定长度l。考虑区间左端点可能落... 阅读全文
posted @ 2015-09-26 16:51 astoninfer 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 给定集合{1,2,...,n}的一个置换,指定每个位置上在其左方且比其小的数的个数,求该置换。这题我目前还只会O(n^2)的做法。以后再用更高效的算法解决。http://poj.org/problem?id=2182 1 #include 2 #include 3 #include 4 usi... 阅读全文
posted @ 2015-09-25 15:09 astoninfer 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 并查集。这题错了不少次才过的。分析见代码。http://poj.org/problem?id=1703 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn = 1e5 + 10; 6 const ch... 阅读全文
posted @ 2015-09-24 21:44 astoninfer 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 题意略去。考虑给定的R对pair(A, B)。即A能看见B,这意味着B不比A低,并且区间内部的所有元素的高度严格小于A的高度。我们规定区间的方向:若A > B,为反方向,反之称为正方向。容易发现,区间在同一方向上不交叉,即要么相离,要么相互包含。在相反反方向上,若两区间不相互包含,必定是有且仅有一个... 阅读全文
posted @ 2015-09-24 17:41 astoninfer 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 计算表达式。只有3种运算符:*,+,- ,*优先级高于后两者,后两者优先级相同。有两种符号:{},()。利用递归和堆栈即可解决。首先遇到左括号开始入栈直到遇到右括号,遇到右括号时对括号内的数进行计算。考虑到*优先级较高,因此遇到*直接对其左右集合进行运算。最后得到不含括号和*的表达式,从左往右计算即... 阅读全文
posted @ 2015-09-23 23:39 astoninfer 阅读(125) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 14 下一页