
线段树
Bahuia
软件工程博士
展开
-
CF - 219D 线段树 + dfs序
题意:n个城市之间有n-1条边相连,其中每条边都是有向的,现在要在其中选择一个城市作为首都,选择某个城市作为首都后,要保证首都可以到达任何城市,那么就要修改原来边的指向,问选首都最少修改几条边,另外要输出所有符合这个最小修改数的首都。思路:一道好题。如果从点的角度出发没什么思路,可以从边的角度考虑这个问题,对于某一条边(u,v),以哪些城市作为首都需要修改这条(u,v)边呢?思原创 2016-11-09 19:15:23 · 299 阅读 · 0 评论 -
CF - 718C 线段树+矩阵
题意:给出n个数a1到an,还有m次操作,操作分为两种类型,一种给下标属于[l,r]的所有ai+x,另一种操作是询问F(a[l])+F(a[l+1])+...+F(a[r]),其中F(i)表示斐波那契数列的第i项。思路:求斐波那契数列通常会想到矩阵。可以发现:根据上面的递推式,可以用线段树维护这一段区间[l,r]中的F(a[i])的和以及F(a[i]-1原创 2016-11-10 16:09:42 · 707 阅读 · 0 评论 -
51Nod - 1781 dp + 线段树 + 离散化
题意:Pinball的游戏界面由m+2行、n列组成。第一行在顶端。一个球会从第一行的某一列出发,开始垂直下落,界面上有一些漏斗,一共有m个漏斗分别放在第2~m+1行,第i个漏斗的作用是把经过第i+1行且列数在Ai~Bi之间的球,将其移到下一行的第Ci列。 使用第i个漏斗需要支付Di的价钱,你需要保留一些漏斗使得球无论从第一行的哪一列开始放,都只可能到达第m+2行的唯一 一列,求花费原创 2017-02-13 09:28:43 · 469 阅读 · 0 评论 -
POJ - 2828 线段树(插队问题)
题意:每个人选择一个位置进入队列,后来的人会插到先来的人前面,问最后队伍上每个人的编号是多少。思路:插队问题,线段树单点更新,后来的人更有主动权,所以只要倒着考虑即可。然后每次插入到当前队列的第p[i]个空位上,sum[i]表示前i个位置中还有多少个空位。代码:#include #include #include using namespace std;#define原创 2017-03-09 20:26:57 · 465 阅读 · 0 评论 -
51nod - 1672 线段树(插队问题变形)
题意:给出n个数,再给出m个区间,要求从中选择k个区间,要求k个区间的所重合的部分的和的最大值。思路:线段树。首先先将n个数按照右端点排序,然后从n到1枚举每个位置作为最后并出来区间的右端点,对于每个确定的右端点R,我们就是要找到一个L保证[L,R]这段区间至少能被k个区间所覆盖。当枚举到位置pos的时候,就是要找区间右端点r >= pos,且区间左端点l 这里就可以利用线原创 2017-03-09 21:35:46 · 578 阅读 · 0 评论 -
51Nod - 1559 线段树 + 扫描线
题意:题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1559 波雷卡普有一个n×m大小的棋盘,上面有k个车。他又放了q个矩形在上面。每一个矩形要受到保护。矩形受到保护的意思是对于该矩形内部所有的格子能够被这个矩形内的某个车攻击到或者被占据,和矩形外面的车无关,即矩形外面的车不能攻击到矩形里面。车的位置是固定的原创 2017-04-07 15:04:15 · 634 阅读 · 1 评论 -
Codeforces Round #426(Div.2)D题 DP+线段树
题意:题目链接:http://codeforces.com/contest/834/problem/D 给出n个数,分割成k个区间,每个区间的价值为该区间内不同数字的种类数,问分割之后,所有区间最大价值和是多少。思路:很容易得到方程: dp[i][j]=max(dp[i-1][k]+kind(k+1,j) 其中dp[i][j]表示的是到第j个数为止已经分了i组的最大价值,k的变化范围是[i,j原创 2017-07-31 11:10:15 · 346 阅读 · 0 评论 -
HDU 6155 dp+矩阵+线段树
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6155 给出一个长度为n的01序列以及Q个操作,操作分两类,一种是将[L,R]内的01序列翻转,二是求出[L,R]中包含多少不同的子序列。思路:对于01序列,设dp[i][j]表示到前i个字符为止,末尾字符为j的子序列个种类数,可以很容易得到状态转移方程: 当str[i]==’0’时: dp[原创 2017-08-30 20:23:17 · 478 阅读 · 0 评论 -
HDU 5649 线段树+二分
题意:题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5649 n个数的排列,两种操作,一种将[L,R]区间内的数递减排序,另一种将[L,R]中的数递增排序,问最后第k个位置的数字是多少。思路:好题。 因为最后考虑的只是第k个位置的数字,二分答案。 每次将序列中比x大的都标记为1,其余包括x标记为0,每次排序前,先查询区间中有多少个1和原创 2017-10-04 11:40:03 · 727 阅读 · 0 评论