线段树、树状数组
刷题
星空皓月
工欲善其事,必先利其器。
展开
-
HDU - 4027 -- Can you answer these queries?【线段树区间更新 + 剪枝】
题意 有n个敌方战舰,每一艘战列舰都标明其耐力值。对于我们的秘密武器的每一次攻击,它都可以通过使战舰的耐久力减到原耐久力值的平方根来降低其连续的耐久力。现在给出m个查询,每个查询包含T, X, Y T = 1;查询x到y战舰的耐力总值 T = 0;x到y的每搜战舰的耐力值减到原来的一半 思路 ps:本以为是一个简单的区间修改 + 区间查询,结果T了。 看了题解才发现可以剪枝。当每个战舰的耐力值减少到1时,就不会再减少了,因为1的平方根就为1. 所以在区间修改的时候加一个判断条件即可。 还有一个坑点原创 2020-08-12 18:31:48 · 130 阅读 · 0 评论 -
HDU - 1540 -- Tunnel Warfare【线段树区间求和 + 二分答案】
Description During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Generally speaking, villages connected by tunnels lay in a line. Except the two at the ends, every village was direct原创 2020-08-06 23:12:12 · 336 阅读 · 0 评论 -
HDU - 4970 -- Killing Monsters【线段树,求后缀和】
Killing Monsters Description Kingdom Rush is a popular TD game, in which you should build some towers to protect your kingdom from monsters. And now another wave of monsters is coming and you need again to know whether you can get through it. The path of m原创 2020-07-30 18:47:29 · 122 阅读 · 0 评论 -
POJ - 2528 -- Mayor‘s posters【线段树区间最小值 + 离散化】
Mayor’s posters Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters at all places at their whim. The city council has finally decided to build an electoral原创 2020-07-28 18:10:05 · 150 阅读 · 0 评论 -
CF - 624 -- F. Moving Points【树状数组 + 离散化】
F. Moving Points 题意: 给定n个位置和对应速度,问在任意时间,使得两点之间的距离最小,求所有点对的最小距离和。 思路: 题意给出的情况只有两种; 1.如果xi < xj,并且vi <= vj,i点肯定不能与j点相遇,即d(i, j) = xj - xi. 2.其他情况都能相遇,即d(i, j) = 0. 在处理最小距离和时,只需要处理第一种情况即可,因为第一种情况才会对答案有贡献。 将所有点按照位移x排为升序,枚举所有点,查找v是第j大。 用一个二维的树状数组,0号位存有多少原创 2020-07-26 19:21:11 · 140 阅读 · 0 评论 -
CF - 590 -- D. Distinct Characters Queries【二维树状数组】
D. Distinct Characters Queries 题意: 给定一个字符串,里面只包括二十六个小写字母,然后个出两个操作 1. 1 pos c, 将pos位置的数改为c字符 2. 2 l r, 求l到r有多少种字符。 思路: 用二维数组,二维存每个字符,一维存这个字符当前有多少个。然后在查询时,枚举26个小写字母即可。时间复杂度 O(26nlog(len)) AC代码 #include<cstdio> #include<cstring> #include<algo原创 2020-07-26 18:32:58 · 140 阅读 · 0 评论 -
ZOJ - 1610 -- Count the Colors【线段树 + 区间更新】
Count the Colors 题意: 将一条线染色,先染色的线段可能会被后染色的覆盖,问染完色后, 每种颜色有多少段,某个颜色不在直线上就不输出。 思路; 将线段颜色,处理成点的颜色,某个线段被染色处理为这个区间的所有点被染成一种色,用一个color数组记录每个点的颜色,初始化为-1,也就是未被染色,ans数组记录每种颜色一共有多少段,修改区间颜色,就是区间更新, 由于是区间修改要用区间更新,然后查询整条直线,用prev表示前一个点的颜色,当递归到叶子结点的适合进行判断即可。 AC代码 /* 区间更新原创 2020-07-23 16:22:08 · 207 阅读 · 0 评论 -
HDU - 2795 -- Billboard【线段树 + 区间最值】
Billboard 题意: 给定一个hw的广告牌,只能从左往右从上往下写,每个广告是1w[i],问每个广告写在第几行,如果不能写输入-1。 思路: 以h作为叶子结点,w作为叶子节点的权值,在写广告的时候从左往右查询, 如果结点大于w[i],则在这个子树部分写,如果不大于就查询右子树,当查询到根结点时,将写了的该行更新,将每个结点的最大值也更新。 本题是一个维护区间最大值问题。 AC代码 /** 单点更新 + 区间最值 时间复杂度 O(t*n*logh) **/ #include<iostream原创 2020-07-23 16:16:24 · 116 阅读 · 0 评论