ACM---数据结构
文章平均质量分 79
Keaper
这个作者很懒,什么都没留下…
展开
-
HDU 1166 敌兵布阵(树状数组模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意:区间查询,单点更新。 题解:树状数组模板。 代码: #include #include #include #include using namespace std; const int MAX=50000+10; int c[MAX]; int N; string op; int原创 2016-05-20 11:01:00 · 339 阅读 · 0 评论 -
HDU 3584 Cube(三维树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3584 题意:三维的空间中有两个操作,初始时每个空间元素均为0,更新操作是0变1,1变0,是一个空间内的所有元素都更新,查询是问这个点的元素是0还是1。 题解:三维树状数组的IUPQ模型(Interval Update Point Query段更新,点求值)。 关键在更新的时候的边界处理,好像是容原创 2016-08-10 18:13:20 · 418 阅读 · 0 评论 -
树状数组题目---HDU 1541 stars 及其变形(降维思想)
1. HDU1541 Stars 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1541 题意:大概就是计算每颗星星左下方包括了多少颗星星,这个数值就是level。左下边不包括本身,不超过本身的x,y的坐标,可以等于。问每种level有多少颗星星。 题解: 这里用到一个降维的思想就是,我们可以先对这些点在进行双关键字排序,保证其有序性后,我原创 2016-08-10 19:11:19 · 431 阅读 · 0 评论 -
树状数组---逆序类题目
1. POJ 2299 Ultra-QuickSort(树状数组逆序+离散化) 题目链接:http://poj.org/problem?id=2299 题意: 给出长度为n的序列,每次只能交换相邻的两个元素,问至少要交换几次才使得该序列为递增序列? 题解:其实就是求逆序对的数量。可以用树状数组来求。虽然数的大小为 999,999,999,但是数的规模只有500,000,所以可以对数据进行原创 2016-08-10 20:38:41 · 313 阅读 · 0 评论 -
树状数组整理
树状数组经典模型 1、PUIQ模型 【例题1】一个长度为n(n 1. add x v : 给第x个元素的值加上v; ( a[x] += v ) 2. sub x v : 给第x个元素的值减去v; ( a[x] -= v ) 3. sum x y: 询问第x到第y个元素的和; ( print sum{ a[i] | x 这是树状数组最基原创 2016-08-08 21:43:44 · 801 阅读 · 0 评论 -
POJ 2892 Tunnel Warfare
题目链接:http://poj.org/problem?id=2892 题意:n个城市连成一条链 除了城市1与城市n 每个城市i左右都分别连接了城市i-1 i+1 有m次操作 操作分为三种 D x 表示摧毁城市x 所有途径该城市的路均被摧毁 R 表示修复上一次摧毁的城市 Q x 表示询问与x直接或间接连接的城市数目(包括城市x)也就是以x为中心连续的未被摧毁的最长区间长度。 题解:原创 2016-08-10 21:07:26 · 343 阅读 · 0 评论 -
POJ 3321 Apple Tree(树状数组+dfs)
题目链接:POJ 3321 题意:一颗有n个分支的苹果树,根为1,每个分支只有一个苹果,给出n-1个分支的关系和给出m个操作,Q x表示询问x的子树(包括x)苹果的数量,C x表示若分支x上有苹果,则摘下来,若没有则会生出一个,输出每个询问的值。 题解:我们可以方便地计算出每个分支上的苹果,但是难点在于怎么求出子树上的苹果。 我们可以DFS遍历整个树,记录每个点遍历的时间戳,即访问的次序,第原创 2016-08-11 08:50:49 · 349 阅读 · 0 评论 -
POJ 1990 MooFest
题目链接:POJ 1990 题意:有n头牛,在一条直线上,处于不同的坐标x,不同的听力值v(耳聋值),当i,j想要通话时,需要max(v(i),v(j))*(dist[i]-dist[j])的volume,问这n*(n-1)/2对牛总共的volume时多少。 题解: 首先是音量我们对这些牛按v值降序排列这样,每次当前牛和其前面的牛计算max(v(i),v(j))就等于当前牛的v值。 然后,原创 2016-08-11 09:07:24 · 282 阅读 · 0 评论 -
HDU 2492 Ping pong
题目链接:HDU 2492 题意:在一条街上,每个人都有一个不同的武力值,两个人可以相互对决,但是对决必须得满足一个条件,那就是要找个裁判, 裁判的武力值只能介于两者之间,而且两个人对决地点只能在裁判家里,裁判的家必须位于两者之间。 题解:考虑每个做裁判的人可以主持的对决场数,我们按坐标从左至右枚举每个人,这个人可以主持的对决数为(左边武力值比他小的人数)*(右边武力值比他大的人数)+(左边武原创 2016-08-11 09:17:20 · 290 阅读 · 0 评论 -
HDU 5480 Conturbatio (前缀和)
题目链接:HDU 5480 题意:在一个棋盘上有一些"车",他能够攻击到与它同一行或者同一列的棋盘上的所有的格子,现在给出K个“车”的坐标,然后有Q组询问,每一次询问(x1,y1,x2,y2)这个方格内的所有棋子是否能够全部被攻击到。 题解:要想保证方格内的所有棋子能够全部被攻击到,必须保证所有的行都有车或者所有的列都有车。因为如果不满足的话,那在那个没有车的行和没有车的列的交叉位置必然不能被原创 2016-08-11 09:25:53 · 311 阅读 · 0 评论 -
2016 Multi-University Training Contest 5 解题报告
1.1003-HDU 5783 Divide the Sequence(贪心) 题意:给出一个字符串,要求尽可能多地切开这个字符串,使得每个子串的所有前缀和都不小于0. 题解 :贪心。如果都是整数当然是每个数都分成一个子串。如果有负数的话,每个负数都要与他两边的数组合起来才可以。又要保证所有的前缀和都不小于0,所以负数只能与前面的数组成一段,贪心,从后往前加直到不小于0组成一段,减去消耗掉的几原创 2016-08-04 09:54:52 · 460 阅读 · 0 评论 -
2016 Multi-University Training Contest 4 解题报告
1.1001-HDOJ 5763 Another Meaning 题意:有两个字符串A和B,字符串A中包含字符串B,字符串B有两层含义,问A串有几种含义? 题解:因为凡是字符串A包含字符串B的位置,均会有两种含义,所以我们可以先用KMP求解出字符串A中包含B的位置,标记这些位置。 然后令dp[i]表示,字符串A前i个字符构成的串的含义数那么考虑两种转移: 末尾不替换含义:dp[i - 1原创 2016-07-31 15:12:13 · 630 阅读 · 0 评论 -
后缀数组模板
先放上模板代码,等理解了再详细写吧。 模板代码: #include #include #include #include using namespace std; const int MAX=100000+10; int rk[MAX],sa[MAX],height[MAX]; //rk-名次数组,sa后缀数组,height-LCP相邻后缀的最长公共前缀长度 int s[MAX],buc[MA原创 2016-08-01 19:17:21 · 304 阅读 · 0 评论 -
HDOJ 1556 Color the ball(树状数组模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 题意:区间更新,单点查询。IUPQ模型(Interval Update Point Query 段更新,点求值)。 题解:树状数组变形。 代码: #include #include #include #include using namespace std; const int MAX=原创 2016-05-20 11:52:25 · 332 阅读 · 0 评论 -
POJ 2155 Matrix(二维树状数组模板)
题目链接:http://poj.org/problem?id=2155 题意:二维区间查询,单点更新。 题解:二维树状数组。 代码: #include #include #include #include using namespace std; const int MAX=1000+10; int sum[MAX][MAX]; int N; int lowbit(int x) { re原创 2016-05-20 12:29:08 · 417 阅读 · 0 评论 -
PAT L2-010. 排座位(并查集)
题目链接:https://www.patest.cn/contests/gplt/L2-010 题目: 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。 输入格式: 输入第一行给出3个正整数:N( 这里假设朋友的朋友也是朋友。但敌人原创 2016-07-07 10:55:33 · 951 阅读 · 0 评论 -
PAT L2-012. 关于堆的判断(堆)
题目链接:https://www.patest.cn/contests/gplt/L2-012 题目: 将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种: “x is the root”:x是根结点; “x and y are siblings”:x和y是兄弟结点; “x is the parent of y”:x是y原创 2016-07-07 10:35:57 · 1776 阅读 · 0 评论 -
PAT L2-006. 树的遍历(二叉树重构)
题目链接:https://www.patest.cn/contests/gplt/L2-006 题目: 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N( 输出格式: 在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。 输入样例: 7 2原创 2016-07-07 11:04:56 · 516 阅读 · 0 评论 -
PAT L2-007. 家庭房产(并查集)
题目链接:https://www.patest.cn/contests/gplt/L2-007 题目: 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式: 输入第一行给出一个正整数N( 编号 父 母 k 孩子1 ... 孩子k 房产套数 总面积 其中 编号 是每个人独有的一个4位数的编号;父 和 母 分别原创 2016-07-07 12:50:32 · 757 阅读 · 0 评论 -
PAT L2-004. 这是二叉搜索树吗?
题目链接:https://www.patest.cn/contests/gplt/L2-004 题目: 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值; 其右子树中所有结点的键值大于等于该结点的键值; 其左右子树都是二叉搜索树。 所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。原创 2016-07-07 21:28:03 · 1161 阅读 · 0 评论 -
POJ 2774 Long Long Message(最长公共子串)
题意:求两个字符串的最长公共子串。 题解: 首先如果这两个长字符串存在某个最长的公共子串,那么该子串一定分别是这两个串的后缀的前缀.所以我们将两个串中间加一个符号‘$’然后连接起来形成一个新串(还要添尾0).然后我们求这个新串的height数组值,我们从sa[1]到新串长sa[n-1]依次扫描字典序相邻的两个后缀的LCP,如果这两个后缀分别属于之前不同的两个串,那么他们的LCP值就可能是他们原创 2016-08-03 17:35:07 · 303 阅读 · 0 评论 -
2016 Multi-University Training Contest 1-1004---HDU 5726 GCD
题目链接:HDU 5726 题意:给出一串数,对于每次区间查询输出这个区间的GCD,并且统计共有多少个区间的GCD等于这个GCD值。 题解: 区间GCD查询:线段树。 统计区间个数:首先,在统计某个区间的GCD值时,相当于统计最后一个数和前面所有数的 GCD 的GCD。 用一个map ans来记录全局的GCD区间个数,map中key为GCD值,value为等于这个值得区间个数。 枚举区原创 2016-07-20 21:21:11 · 381 阅读 · 0 评论 -
POJ 3461 Oulipo(KMP模板)
题目链接:POJ 3461 题意:字符串匹配。 题解:KMP。有一篇讲解KMP的博客非常详细:从头到尾彻底理解KMP(2014年8月22日版) 我保存了一份PDF 代码: #include #include #include #include #include using namespace std; const int MAX=10000+10; int next[MAX];原创 2016-07-31 12:12:54 · 298 阅读 · 0 评论