----数据结构----
beihai2013
这个作者很懒,什么都没留下…
展开
-
ST算法 UVA11235 Frequent Values
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23846 题意:问某区间内的众数 思路:主要是练练ST算法,把左右两个不完整的区间剪去后,中间的区间用ST算法一次查询出来。区间的题应该都可以用线段树做。莫名其妙的是,在HDU上交同样的代码就WA 源码: #include #include #incl原创 2015-04-18 11:44:55 · 280 阅读 · 0 评论 -
LightOj 1081 二维线段树
LightOj 1081 题目链接: http://www.bnuoj.com/v3/problem_show.php?pid=13000 题意: 问一个给定矩形中某一块区域的最大值。 思路: 裸二维线段树不带修改。 源码:#include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include原创 2016-01-18 18:56:18 · 409 阅读 · 0 评论 -
HDU 1823 二维线段树
HDU 5978 题目链接: http://www.bnuoj.com/v3/problem_show.php?pid=5978 题意: 中文题 思路: 裸二维线段树,题目坑在输入部分已注释 源码:#include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #原创 2016-01-18 18:55:37 · 272 阅读 · 0 评论 -
清橙A1206 莫队
清橙A1206 题目链接: http://www.tsinsen.com/A1206 题意: 中文题 思路: 莫队算法入门题。 从昨晚上看到现在也是有够笨的…… 莫队算法有一个引入的知识是曼哈顿最小生成树,不过这个好像比较难的样子,因为可能会用到平衡树或者线段树。只需要知道一个结论就可以,那就是对于一个二维平面图中一些点,如果要构造一个曼哈顿距离的最小生成树,那么选取边的时候对于一个原创 2016-01-25 10:27:41 · 444 阅读 · 0 评论 -
CF 86D 莫队(卡常数)
CF 86D 题目链接: http://codeforces.com/problemset/problem/86/D 题意: 一个数列,问[L,R]区间内(每个数字的个数的平方*数字的大小)的和。 思路: 莫队模板。 不过更新的时候卡常数闹哪样……从网上抄了一个,好像移位运算比单纯乘法快很多的样子,也mark一下好了 源码:#include <cstdio> #include <cs原创 2016-01-25 13:14:34 · 1253 阅读 · 0 评论 -
HDU 5592 线段树
HDU 5592 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5592 题意: 一串1-n的排列。(n <= 5000) 定义a[i]为前i个数的逆序对数,然后要还原这个排列。 思路: 现场的时候有思路,但是线段树不会敲就放弃了。 简单说一下思路,从后往前遍历,由a[i] - a[i - 1]知道当前这个位置放的是剩下的数中第几大的原创 2015-12-06 19:44:03 · 458 阅读 · 0 评论 -
BZOJ 3289 莫队 树状数组
BZOJ 3289 题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3289 题意: 问[L,R]区间最少交换几次相邻数字使得整个序列有序。 思路: 统计逆序对,用树状数组。然后跑一遍莫队。 离散化部分容易超时,所以直接修改了数组。 源码:#include <cstdio> #include <cstring> #inclu原创 2016-01-25 18:10:27 · 278 阅读 · 0 评论 -
CF 617E 莫队
CF 617E 题目链接: http://codeforces.com/problemset/problem/617/E 题意: 问[L,R]区间内,有多少个子区间,它们里元素的异或和为k。 思路: 莫队算法。 发现自己对于这个算法理解还是不到位。主要是下标问题。如本题,处理完pre数组后,pre数组表示XOR(a[1]^a[2]…a[i]),所以更新的时候更新左区间需要更新pre[i原创 2016-01-25 21:42:25 · 527 阅读 · 0 评论 -
HDU 5603 树状数组
HDU 5603 题目链接: 题意: 有n(<=3*1e5)条线段。 M个分组,每个分组里有一些点。所有分组的点数和不超过3*1e5 点和线段的点范围均在1e6以内。 为对于一个分组,有多少条线段至少覆盖分组里的一个点。 思路: 基本照着div1里大神们的代码写的,万分感谢~Solution1: 反过来看,只要求每个分组里不覆盖点的线段就可以。 如果把数轴的左端点0和右端点1e6原创 2015-12-27 18:56:32 · 541 阅读 · 0 评论 -
POJ 2991 线段树
POJ 2991 题目链接: http://poj.org/problem?id=2991 题意: 给n个初始线段,线段首尾相连。刚开始它们都在y轴上。 现在每次做旋转操作。操作时,前u个点不动,第u个点相对u-1点做旋转,u点后面的点相对u的位置也不动。 思路: 线段树,区间更新。 因为每次操作相当于更新u及u后面的所有点,所以保存一个点结构,结构里有x、y、angle、flag四原创 2016-02-05 16:42:33 · 371 阅读 · 0 评论 -
CSU 1690 期望DP + 数据结构
/* 首先题目你要理解清楚 对于每个一行的文本串,最后一个字符串是前面的问句的答案 每次可以在一个句子的一半打断他进行抢答 问最有得分的期望值建一个字典树,字典树上的点存储的是字符串 但是本题奇特的方式在在于字典树上存储了两个值 一个是正常的文本串顺序,用于遍历和存储文本串 一个是对于每个句子的答案,有多少个句子可以在这个点回答此答案最后按照期原创 2016-03-11 18:24:46 · 231 阅读 · 0 评论 -
Codeforces Educational Round 12 655ABCDE
Codeforces Educational Round 12 通过数: 3 A: 刚开始用公式分类讨论,后面发现暴力才是一种更优美的解法#include <bits/stdc++.h> using namespace std; const int MAXN = 10 + 5; char str[MAXN]; int main() { int x1, y1, x2, y2; w原创 2016-04-21 22:32:29 · 379 阅读 · 0 评论 -
12年杭州 D 二维树状数组+离散化 HDU 4456
12年杭州 D赛中的时候感觉数组开不下,并没有什么很好的思路 实际上,离散化每个需要操作的点之后,这就变成了一个简单的二维树状数组题目。 关于离散化的操作,由于服务器内存卡的比较死,试了几种姿势后都不行,还是采用网上的线性膜的方法。按理说这种方法可以构造出极端数据卡掉的,但是过了失分点: 1. 没有想到二维线树状数组离散化 2. 离散化的离散方法,离散化的数组大小。 学习点原创 2016-06-18 18:09:43 · 864 阅读 · 0 评论 -
Codeforces 703D 树状数组
Codeforces 703D 题意: 给1e6长度的区间,每个单位代表一个数。 给1e6个询问,每次问区间内出现次数为偶数次的数异或和。 思路: 赛中的时候想莫队水过去,结果pretest都没过233 正解是树状数组。首先假设是奇数次的话,就是一个简单前缀和。现在偶数次,有一个处理技巧就是记录这个区间出现过的数字的异或和。然后就是明显的树状数组统计题。原创 2016-08-06 21:24:24 · 516 阅读 · 0 评论 -
HDU 4819 二维线段树
HDU 4819 题目链接: http://www.bnuoj.com/v3/problem_show.php?pid=35690 题意: 给一个初始矩阵,矩阵大小1000 * 1000。 现在有一个操作询问以(i,j)为中心的正方形(保证边长为奇数)中矩阵格子里的最大值和最小值,输出(max+min)/2,并且把这个格子变成这个值。 思路: 裸二维线段树,其实是自己想的写法居然和大多原创 2016-01-18 18:55:04 · 242 阅读 · 0 评论 -
POJ 2155 二维线段树
POJ 2155 题目链接: http://www.bnuoj.com/v3/problem_show.php?pid=2274 题意: 给一个01矩阵,每次可以进行操作将[x1,x2,y1,y2]内的所有元素0变1、1变0。也可以进行询问,询问某一个格子的0和1。 输出询问。 思路: 二维线段树版题,稍微转化一下记录查询一个点时它所经过的路径上经过偶数次修改就为0,奇数次为1。线段树原创 2016-01-18 18:53:14 · 231 阅读 · 0 评论 -
线段树 HDU1734 I Hate It
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=14797 题意:给定一些点的值,并在操作的过程中会附带一些重新赋值的操作。问某个区间内最大值是多少。 思路:线段树。轻松愉快不解释。 源码: #include #include #include #include #include usin原创 2015-04-16 13:36:18 · 495 阅读 · 0 评论 -
树状数组 POJ2492 Ping Pong
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=12089 题意:按顺序给定一些人和能量值。问按照顺序选人,中间人能量值在两边人能量值的中间,问最多有多少种选法 思路:一次AC有木有!其实是照着书上题解的思路打的。 设c[i]为某a[i]处左边能量值比他小的人数和,d[i]为右边能量值比他大的人数和,然后一个简原创 2015-04-17 10:58:07 · 313 阅读 · 0 评论 -
线段树—区间更新 HDU4267 A Simple Problem With Integers
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=31829 思路:线段树。主要是学习一下线段树的区间更新。 描述一下区间更新的方法。查询当前区间是否在要更新的区间内,若在,标记add值为更新值;不在,把要更新区间按照已有线段树的分割方法分割然后向下传递。查询的时候,如果为单点,把单点的值更新为sum+add;ad原创 2015-04-17 09:00:03 · 271 阅读 · 0 评论 -
逆波兰式 HDU1237 简单计算器
题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19367 题意: 给定一个计算式,计算式合法。每个运算符和数字之间差一个空格,输出其值。 思路: 逆波兰式模板题。 逆波兰式主要是这样一个操作。两个栈(最初和队列弄混。队列为先进先出),一个栈s1存储逆波兰式,一个栈s2作临时存储,存储操作数。读入数字时原创 2015-05-05 22:23:54 · 608 阅读 · 0 评论 -
二叉树 UVA 548 Tree
题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19105 题意: 给定一棵树的后序排列和中序排列,求这棵树最小路径的叶节点的值 思路: 主要通过此题掌握什么是后序排列和中序排列,并且怎么用他们还原一棵树。 后序排列即先排左子树,再排右子树,最后排根节点。这样就决定了最后一个点为根节点。 中序排列即先原创 2015-06-18 20:06:21 · 288 阅读 · 0 评论 -
HDU 3791 BST
HDU 3791 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3791 题意: 问两颗二叉搜索树是否相同 思路: 构建二叉搜索树。 语法方面需要注意的是,如果对一个指针需要重用,每次都要把它声明成NULL。 源码: #include #include #include #include #include #i原创 2015-08-17 10:06:01 · 322 阅读 · 0 评论 -
HDU 5536 01Trie树
HDU 5536 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5536 题意: 1000个数里面,选三个下标不同的数构成函数(ai+aj)^ak。 求这个函数的最大值。 思路: 复现并没有做出来。 暴力竟然能过。 01Trie的话本质是贪心,把所有数按照二进制插入Trie里,枚举i和j,然后每次用32的常数级查询就能得到对应最大值原创 2015-11-04 23:00:19 · 367 阅读 · 0 评论 -
SPOJ 375 树链剖分
SPOJ 375 题目链接: 题意: 思路: 首先感谢这位博主http://blog.csdn.net/y990041769/article/details/40348013,基本照着打的。 昨晚打CF的时候遇到一道树链剖分的版题,今天顺便就学了一下……然后就学了一天。这是一道树链剖分的版题。 树链剖分用于对一个带权值的树(边权或点权,边权可以通过下面代码类似的转化方式转成点权,但是查询原创 2015-11-05 20:43:47 · 314 阅读 · 0 评论 -
HDU 3966 树链剖分
HDU 3966 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3966 题意: n个(<=1e5)兵营,以树的形式相互连接构成连通图。给出初始每个兵营的兵数量。 然后有修改操作,即u-v的路径上(包括u,v)经过的兵营兵的数量全减少或增加某一个值。 有查询操作,求一个兵营当前兵的数量。输出这个数量。 思路: 裸的树链剖分。 各种写原创 2015-11-08 10:10:08 · 285 阅读 · 0 评论 -
HDU 4777 思维 + 树状数组
HDU 4777 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4777 题意: 一些数,一些询问。 询问一段区间内,和其他数都互质的数有几个。 注意1和所有数包括1本身互质。 思路: 基本参照http://m.blog.csdn.net/blog/u011663071/39059483 首先一个朴素的想法是暴力。 然后就想到应该原创 2015-10-26 20:53:09 · 411 阅读 · 0 评论 -
HDU 5517 二维树状数组
HDU 5517 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5517 题意: 有二元组(a,b),三元组(c,d,e)。当b == e时它们能构成(a,c,d)。 然后,当不存在(u,v,w)!=(a,b,c)且u>=a,v>=b,w>=c时,则是一个better集合里的元素。 问这个better集合有几个元素。 思路: 自己写的原创 2015-11-02 16:29:59 · 1597 阅读 · 0 评论 -
Codeforces 610D 矩形面积并
Codeforces 610D 题目链接: http://blog.csdn.net/julyana_lin/article/details/7834653 题意: 给n个矩形,宽度均为1,与x或者y中一个轴平行。 矩形可能有覆盖。 求所有矩形覆盖后的面积和。 思路: 有map乱弄的做法,以下采用矩阵面积并。矩阵面积并 = 线段树 + 扫描线 + 离散化把矩形分成下边和上边,下边进入原创 2015-12-30 19:58:45 · 406 阅读 · 0 评论 -
LightOj 1188 树状数组
LightOj 1188 题目链接: http://www.bnuoj.com/v3/problem_show.php?pid=13000 题意: 给一个数列(len <= 1e5),数列里的数(num <= 1e5)。 现有q次询问(<=1e5),询问某个区间的不同的数有多少个。 思路: 明显的树状数组统计,自己写的时候不太清楚那个树状数组到底应该怎么维护。有点想用扫描线类似的思想,原创 2016-01-17 23:44:53 · 250 阅读 · 0 评论 -
Codeforces 706E 十字链表(dancing link)
Codeforces 706E题意: 给一个1000*1000的矩阵,有1000次操作,每次可以交换矩阵的两个子矩阵,保证子矩阵不重叠。输出最后的矩阵。 思路: 十字链表的版题,可以用dancing link的类似数组实现。 具体方法为,先把所有二维坐标转化为一维坐标。开两个数组ri[i],down[i]。分别表示对于某一维下标为i的矩阵单元格,它右边和下边的格子下标原创 2016-08-13 21:36:19 · 794 阅读 · 0 评论