
ACM_数据结构
文章平均质量分 77
京城一十三
你在凝视深渊的时候 深渊也在凝视着你
展开
-
POJ2528线段树段更新逆序异或(广告牌)
题意: 可以这样理解,有一条直线,然后用n条线段去覆盖,最后问全部都覆盖完之后还有多少是没有被完全覆盖的。思路: 一开始想的有点偏,想到起点排序,然后..失败了,原因是忘记了题目输入的顺序就是覆盖的顺序,后来突然想到了逆序,这个题目想到逆序也就差不多了,我们可以逆序处理,然后用异或操作去判断当前这段是否全部都被覆盖了,只要异或不是1,那么就是还有没覆盖的,那原创 2015-06-04 16:36:45 · 594 阅读 · 0 评论 -
POJ2155二维线段树
题意: 给一个n*n的01矩阵,然后有两种操作(m次)C x1 y1 x2 y2是把这个小矩形内所有数字异或一遍,Q x y 是询问当前这个点的值是多少?n思路: 做的有点蛋疼,昨天自己用了将近5个小时自己研究了两个二维线段树的算法,都失败了,其实我想到的第二个算法和网上那个差不多(后来看网上的思路才发现),但是我考虑的是段更新的PushDown的问题,其实这个原创 2015-06-04 16:26:14 · 1114 阅读 · 0 评论 -
hdu5253最小生成树
题意:(中文题,直接粘过来吧) 连接的管道 老 Jack 有一片农田,以往几年都是靠天吃饭的。但是今年老天格外的不开眼,大旱。所以老 Jack 决定用管道将他的所有相邻的农田全部都串联起来,这样他就可以从远处引水过来进行灌溉了。当老原创 2015-06-04 16:17:35 · 1480 阅读 · 0 评论 -
hdu5251最小矩形覆盖
题意(中问题直接粘吧)矩形面积Problem Description小度熊有一个桌面,小度熊剪了很多矩形放在桌面上,小度熊想知道能把这些矩形包围起来的面积最小的矩形的面积是多少。 Input第一行一个正整数 T,代表测试数据组数(1≤T≤20),接下来 T 组测试数据。每组测试数据占若干行,第一行一个正整数 N(1≤N O原创 2015-06-04 16:15:10 · 1203 阅读 · 0 评论 -
hdu5249KPI动态中位数(两个set)
题意(中问题直接粘题意吧) KPIProblem Description你工作以后, KPI 就是你的全部了. 我开发了一个服务,取得了很大的知名度。数十亿的请求被推到一个大管道后同时服务从管头拉取请求。让我们来定义每个请求都有一个重要值。原创 2015-06-04 16:14:35 · 912 阅读 · 0 评论 -
poj1509最小表示法
题意: 给你一个循环串,然后找到一个位置,使得从这个位置开始的整个串字典序最小。思路: 最小表示法的建档应用,最小表示法很好理解,就点贪心的意思,一开始我们枚举两个起点i,j然后谁大谁往后移动,相等则比较下一个,这样到最后取一个小的值就行了,时间复杂度是O(n)的,很好的小方法。#include#includechar str[1000原创 2015-05-04 22:48:08 · 1024 阅读 · 0 评论 -
POJ1151基本的扫描线求面积
题意: 给定n个矩形的对角坐标,分别是左下和右上,浮点型,求矩形覆盖的面积。思路: 基本的线段树扫描线求面积,没有坑点,不解释了,提示一点,有的题尤其是线段树扫描线的题需要离散化的时候建议二分去找,别map,记得之前map超时过很多次,但不是针对这个题目,这个题数据量不大,怎么都行,发现codeblock这个编译器定义宏然后在定义结构体的时候变量名字相同导原创 2015-05-04 22:42:43 · 440 阅读 · 0 评论 -
ZOJ3261并查集逆向处理
题意: 给你一些点,还有一些边,每个点上都有一个权值,然后有一些询问,分为两种,query a 询问与a直接或者间接想连的点中最大权值的是那个点,输出那个点,如果那个点的权值小于等于a的权值,那么就输出-1,还有另一种操作就是destroy a b意思是删除a b的关系。思路: 比较基础的并查集题目,看到删边,很容易想到逆向离线处理,先把最终的状态建原创 2015-04-05 15:34:16 · 1266 阅读 · 1 评论 -
POJ3687拓扑排序+贪心
题意: 给你n个求,他们的重量是1-n(并不是说1号求的重量是1...),然后给你m组关系a,b,表示a的重量小于b的重量,然后让你输出满足要求的前提下每个球的重量,要求字典序最小。思路: 很容易想到这个可以用拓扑排序(其实如果没有字典序那个要求的话查分约束也行),还有就是这个里面的字典序最小不是说拓扑排序的字典序最小,这个要整清楚,如果是求拓扑排序的序原创 2015-04-05 15:33:10 · 526 阅读 · 0 评论 -
POJ3233不错的矩阵(矩阵套矩阵)
题意: 给一个n*n的矩阵A,然后求S=A + A^2 + A^3 + ..+ A^k.思路: 矩阵快速幂,这个题目挺新颖的,以往的矩阵快速幂都是退出公式,然后构造矩阵,这个比较特别,直接上子矩阵吧A 1 平方后得到 A^2 1+A 三次方 A^3 1+A+A^20 1 0 1原创 2015-04-05 15:28:11 · 1339 阅读 · 0 评论 -
POJ1611基础带权并查集
题意: 有一个人生病了,和他一个社团或者间接和他有联系的人都会生病,问一共有多少人生病了。思路: 比较简单和基础的题,带权并查集中的一种,就是记录更新集合元素个数,这个题目我是开始的时候每个人自己在自己的集合里,元素个数是1,然后在多开出来m个集合,让第i个社团直接映射到i+n个集合,元素个数一开始是0,然后就是简单更新了,还有就是注意下两个人已经属于同一个原创 2015-02-06 16:44:01 · 496 阅读 · 0 评论 -
hdu3374最小表示法+KMP
题意: 给你一个最长100W的串,然后让你找到最小同构子串,还有最大同构子串的下标,最小同构子串就是把字符串连接成一个环,然后选择一个地方断开,得到的一个ASCII最小的子串(求最大同理),得到两个下标之后还要求两个数,就是最小子串出现的次数,还有最大子串出现的次数,就是所有循环移位后的到的len个子串中最小子串出现了多少次?思路: 求最小和最大小标这个可以原创 2015-02-06 16:33:40 · 503 阅读 · 0 评论 -
UVA11992不错的线段树段更新
题意: 给你一个矩阵,最大20*50000的,然后有三个操作1 x1 y1 x2 y2 v 把子矩阵的值全部都加上v2 x1 y1 x2 y2 v 把子矩阵的值全部都变成v2 x1 y1 x2 y2 查询子矩阵的和,最大值,最小值思路: 首先我们观察,矩阵的行最多20行,那么我们就可以把每一行都建一颗线段树,这样就变成了一个一维的线段树原创 2014-12-30 17:06:44 · 566 阅读 · 0 评论 -
Building Fire Stations 39届亚洲赛牡丹江站B题
题意: 给你一棵树,让你再里面选取两个点作为**点,然后所有点的权值是到这两个点中最近的那个的距离,最后问距离中最长的最短是多少,输出距离还有那两个点(spj特判)。思路: 现场赛的时候我们压根就没看这道题,还有k题也是水题,可惜当时我们读的题意不对,最后只过了3个题,拿了个铜,不过没啥遗憾,因为这是第一次去亚洲赛,没空手而归就是好事,下几场放开了打就行了。原创 2014-10-14 20:55:53 · 793 阅读 · 0 评论 -
POJ 3613 快速幂+Floyd变形(求限制k条路径的最短路)
题意: 给你一个无向图,然后给了一个起点s和终点e,然后问从s到e的最短路是多少,中途有一个限制,那就是必须走k条边,路径可以反复走。思路: 感觉很赞的一个题目,据说证明是什么国家队集训队论文什么的,自己没去看那个论文,就说下我自己的理解吧,对于这个题目,我们首先分析下Floyd,那个算法的过程中是在更新的dis[i][j]上再更新,再更新。。。,是想一下,我们原创 2014-09-28 19:44:14 · 906 阅读 · 0 评论 -
hdu4046 不错的线段树单点更新
题意: 给一个字符串,两种操作 0 a b 询问a,b之间有多少个wbw, 1 a c 就是把第a个改成c.思路: 这个题目我们可以用线段树的点更新来做,一开始写了个好长好长的线段树,pushup写了很长,每个节点7个变量,结果 "呵呵"。其实根本不用那么麻烦,我当时想的麻烦了,每个节点只有一个sum就行了,每个节点代表的是以当前这段的每个点为终点的wbw的个原创 2014-09-18 15:53:35 · 569 阅读 · 0 评论 -
hdu3255 线段树扫描线求体积
题意: 给你n个矩形,每个矩形上都有一个权值(该矩形单位面积的价值),矩形之间可能重叠,重叠部分的权值按照最大的算,最后问这n个矩形组成的图形的最大价值。思路: 线段树扫描线求长方体体积,对于求体积,如果理解求面积的过程,求体积也很容易理解,就是先一层一层的求面积,然后把面积当成"当前所覆盖的线段",以长方体的高的方向更新原创 2014-09-17 21:07:18 · 511 阅读 · 0 评论 -
hdu 3265 线段树扫描线(拆分矩形)
题意: 给你n个矩形,每个矩形上都有一个矩形的空洞,所有的矩形都是平行于x,y轴的,最后问所有矩形的覆盖面积是多少。思路: 是典型的矩形覆盖问题,只不过每个矩形上多了一个矩形洞,我的做法是吧当前的矩形分成四个小的矩形,然后用线段树的扫描线扫一遍就ok了,记得要用INT64 ,自己没注意这个问题wa了一次。原创 2014-09-17 18:55:30 · 577 阅读 · 0 评论 -
hdu5015 矩阵快速幂233(好题)
题意: 给你一个(n+1)*(m+1)的矩阵mat,然后给你mat[0][1] = 233 ,mat[0][2] = 2333,mat[0][3] = 23333...,然后输入mat[1][0] ,mat[2][0] ,mat[3][0]....然后给了矩阵中的其他数值是mat[i][j] = mat[i-1][j] + mat[i][j-1],最后让你输出mat[n][m]。原创 2014-09-15 20:56:46 · 500 阅读 · 0 评论 -
hdu4990 矩阵快速幂
题意: 给你一短代码,让你优化这个代码,代码如下#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include#include #include #include #includeconst int MAX=100000*2;const int INF=1e9原创 2014-09-10 15:28:27 · 698 阅读 · 0 评论 -
SPOJ 2713 线段树(sqrt)
题意: 给你n个数(n 输出 x-y的和。思路: 直接线段树更新就行了,对于当前的这个区间,如果里面只有0或者1,那么就把他mark上,以后不用在更新了,10^18 更新不了多少次就会变成0或者1的,所以时间复杂度也没多少,每次更新能返回就返回,不能返回就一定要精确到点,然后sqrt,然后查询的话就是一个简单的段询问。原创 2014-09-10 15:02:04 · 617 阅读 · 0 评论 -
hdu2276 矩阵构造
题意: 给了n个灯泡的状态,他们绕成一个环,0是灭,1是亮,每一秒灯泡的状态都会改变,规则是如果当前这个灯泡的左边的灯泡当前是状态1,那么下一秒当前的这个灯泡状态就改变0变1,1变0,最后问你m秒后的状态。思路: 我们先找当前状态和下一个状态的关系(状态也就是秒),我们可以抽象成这么一种关系,如果第i个灯泡的状态是ai,那么下原创 2014-09-01 21:11:52 · 778 阅读 · 0 评论 -
hdu4973 线段树(题目不错,用了点,段,更新查找还有DFS)
题意: 给你一个初始序列,初始序列长度n,分别为1 2 3 4 5 ....n,有两种操作(1)D l r 把l_r之间的数据都复制一遍 1 2 3 4 5 6 D 2 4 = 1 2 2 3 3 4 4 5 6(2)Q l r 询问lr之间的数字出现的最大次数 1 2 2 3 3 4 4 4 5 Q 1 3 = 2思路: 这个题目可以用线段树来解决原创 2014-09-01 18:32:11 · 441 阅读 · 0 评论 -
hdu1255 扫描线,矩形重叠面积(两次以上)
题意: 给你n个矩形,然后问你这n个矩形所组成的画面中被覆盖至少两次的面积有多大。思路: 和1542差距并不是很大,大体上还是离散化+线段树扫面线,不同的地方就是这个题目要求覆盖至少两次,那么假如l1:覆盖一次的区间长度,l2:覆盖至少两次的区间长度, l3:整个区间的长度,并且满足 l1 + l2 = l3,cnt为区间覆盖次数,那么在更新pushup的时候原创 2014-08-31 19:20:25 · 667 阅读 · 0 评论 -
hdu1828 线段树扫描线求矩形面积的周长
题意: 给你n个矩形,问你这n个矩形所围成的图形的周长是多少。思路: 线段树的扫描线简单应用,这个题目我用的方法比较笨,就是扫描两次,上下扫描,求出多边形的上下边长和,然后同理左右扫描,求出多边形的左右边长的和,然后加起来就行了,还有这个题目有一个小小的提示,就是在重边的时候记得是先加边在删边。不然会多加边(这个地方不管也能AC显然是数据弱,不信的自己找一个简单原创 2014-08-31 16:36:21 · 578 阅读 · 0 评论 -
hdu1542 线段树扫描线求矩形面积的并
题意: 给你n个正方形,求出他们的所占面积有多大,重叠的部分只能算一次。思路: 自己的第一道线段树扫描线题目,至于扫描线,最近会写一个总结,现在就不直接在这里写了,说下我的方法,我是离散化横坐标,然后去扫描纵坐标(反过来也行),把每一个长方形的两个宽边拿出来,按照高度排序,然后开始扫描,对于么一个区间的更新,我用的是暴力点更新,因为如果写段更新的话第二个权值没有想到原创 2014-08-31 16:31:20 · 533 阅读 · 0 评论 -
POJ3277 线段树段更新,点询问+二分离散化+暴力
题意: x轴上有一些矩形,问你这些矩形覆盖的面积和是多少。思路: 首先范围很大,n很小,果断离散化,然后我们就是求出任意区间的最大值作为当前区间的高,最后在算一遍答案就行了,一开始超时了,离散化的时候用map了,后来改成二分就ac了,感觉题目不是很难,明天得开始学习学习扫描线了,还不知道什么是扫描线呢。原创 2014-08-28 21:16:40 · 594 阅读 · 0 评论 -
hdu4291 暴力循环节+矩阵快速幂
题意: 给你一个关系式,x[n] = 3*x[n-1] + x[n-2],求x(x(x[n]))%1000000007.思路: 做这个题目要明确一点,就是对于取余操作大多数时候都会出现循环节的情况,尤其是对于像这个题目的转换公式,数据有规律递增,那么也就是说0 1 1 ....等再次出现0 1的时候也就是一定找了循环节,对原创 2014-08-27 20:10:44 · 628 阅读 · 0 评论 -
hdu3074 线段树求区间乘积(单点更新)
题意: 给你n个数,两种操作,(1) 把第b个数改成c (2)算出b-c的乘积,结果对1000000007取余。思路: 线段树单点更新,简单题目,不多解释,具体看代码。原创 2014-08-26 20:47:51 · 1704 阅读 · 0 评论 -
hdu1556 线段树段更新(简单题)
题意原创 2014-08-26 19:28:52 · 2754 阅读 · 0 评论 -
hdu4302 set或者线段树
题意: 一条蛇生活在一个管子里,然后管子上面的某些位置会一次出现食物,每次蛇都会吃最近的食物,吃完之后就原地不动,等待下一次吃食物,如果有两个食物距离蛇一样远并且都是最近的,那么蛇不会掉头,而是直接按他最后停留的方向走,去吃自己前方的食物,最后给一些命令,问蛇一共走了多少路。思路: 看完一下就想到了set,结果原创 2014-08-26 16:32:53 · 802 阅读 · 0 评论 -
hdu4920 矩阵乘法%3
题意: 给你两个矩阵,让你求两矩阵的乘积,然后3取余。矩阵是n*n的,n思路: 如果什么都不考虑的话,矩阵的乘法是o(n^3)的,800*800*800 = 512000000,超时那是妥妥的,而且还用到取余,%这个东西在我的印象里是很费时间的,回到这道题目,我们发现一个很关键的地方,就是%3,那么也就是说只有0.1.2这三种状态,这样的话我们直接改变一下矩阵乘原创 2014-08-06 16:00:38 · 521 阅读 · 0 评论 -
hdu4911 简单树状数组
题意: 给你一串数字,然后给你最多进行k次交换(只能交换相邻的)问交换后的最小逆序数是多少。思路: 首先要知道的一个就是给你一个序列,每次只能交换相邻的位置,把他交换成一个递增序列所需要的最少步数等于整个序列的逆序数,在转化到这个题目,我们只要求出个逆序数,然后输出逆序数 - k就行了,如果是负数输出0。原创 2014-08-06 15:56:13 · 793 阅读 · 0 评论 -
hdu2492 数状数组或者线段树
题意: 给你一些人,每个人有自己的攻击力,输入的顺序就是每个人的顺序,他们之间互相比赛,两个人比赛的条件是必须在他们两个位置之间找到一个人当裁判,这个裁判的攻击力必须在他们两个人之间,问你最多能矩形多少场比赛。思路: 枚举每一个点当裁判,线段树或者树状数组正着跑一遍记录大于等于当前点和小于等于当前点的个数,然后倒着跑一边,做同样处理,最后乘一下就行原创 2014-08-04 19:31:38 · 775 阅读 · 0 评论 -
hdu4717 三分(散点的移动)
题意: 给你一些点,这些点有各自的初始位置,移动速度和方向,问你什么时候任意两点中最长的距离最小,求时刻和此时的距离..思路: 感觉题目很赞,一开始想不到三分,因为么有办法证明他是凹性或者凸性函数,后来师傅给我说了几个特例,自己在想想瞬间明白了,其实仔细想下会发现,假设我们当前的函数是随着x,y逐渐减小的,那么此时的某一时刻占据主要角色的那两个点一定是相聚的,而原创 2014-04-27 15:57:02 · 540 阅读 · 0 评论 -
hdu4454 三分 求点到圆,然后在到矩形的最短路
题意: 求点到圆,然后在到矩形的最短路.思路: 把圆切成两半,然后对于每一半这个答案都是凸性的,最后输出两半中小的那个就行了,其中有一点,就是求点到矩形的距离,点到矩形的距离就是点到矩形四条边距离中最小的哪一个,求的方法有很多,一开始想都没想直接敲了个三分(这样就是两重三分了)跑了890ms AC的,后来看了看人家的都是直接用模板过的,我也找了个模板,结原创 2014-04-27 15:43:01 · 518 阅读 · 0 评论 -
hdu3714 水三分
题意: 给你一些函数 y = ax^2 + bx + c,的a >= 0 的二次函数,x的范围是0--1000,问你在这个范围内函数值最大的最小是多少,最大指的是对于某一个x最大的那个y,最小指的是全体的x范围中最大的那个最小..思路: 因为a>=0 所以都是开口向上的,如果话F(n) 的 xy( x原创 2014-04-27 15:37:13 · 995 阅读 · 0 评论 -
hdu3400 两重三分
题意: 题意给你两个公路 A-B C-D 和三个速度V(ab) V(cd) 和 V(两条公路之间) 问你从A到D的最短时间是多少.思路: 一开始暴力了其中的一条边,每次加0.01,另一条边用的三分,结果wa掉了,感觉不wa暴力一条边时间上也够呛,后来看了下题解,人家用的是两重三分,就是三分其中一条边,当对于最外层的那个三分的某两个点也就是 mid mmid,我们在三原创 2014-04-27 15:30:35 · 509 阅读 · 0 评论 -
hdu4267线段树段更新,点查找,55棵线段树.
题意: 给你N个数,q组操作,操作有两种,查询和改变,查询就是查询当前的这个数上有多少,更改是给你a b k c,每次从a到b,每隔k的数更改一次,之间的数不更改,就相当于跳着更新.思路:(别人的) (i - a) % k == 0 等价于 i % k == a % k 一共有10中情况 还有枚举所有情况中的小情况 (1)1 2 3原创 2014-03-23 17:13:01 · 489 阅读 · 0 评论