线段树,树状数组
文章平均质量分 64
数据结构
Top_xiao
这个作者很懒,什么都没留下…
展开
-
2020牛客暑期多校训练营(第八场)A All Star
题目连接每个球员有一些粉丝,一个粉丝会去看某个球员比赛的条件是他喜欢这个球员和他喜欢同一个球员的人喜欢这个球员。球员与粉丝的关系可以动态改变,问每一次改变之后,最少请多少球员来比赛才可以使得所有粉丝来看比赛。改变就是对于 b a 两个数,b 是粉丝编号, a 是球员编号,如果 b 是 a 的粉丝,那么现在b 就不是a 的粉丝了,反之 b 变成了 a 的粉丝。相当于线段树分治,对于每个询问,丢到线段树的每个叶子节点中,然后记录每个关系持续的区间。使用线段树区间覆盖就可以了。cnt 代原创 2020-10-05 13:55:30 · 228 阅读 · 0 评论 -
2020牛客暑期多校训练营(第二场)H. Happy Triangle
三个操作1 多重集合中添加一个数2 多重集合中删除一个数给你一个数x, 问能不能从集合中找到两个数 a b, 使得 a b x 构成三角形。思路:对于多重集合中, 我们假设他有序,那么我们只要找到连续的 a b, 使得 a + b > x, b - a < x, 其中 a <= b, 如果符合这样就好了,使得 多重集合有序, 我们用 map 实现。我们只需要在map中找到 x / 2 + 1 的位置, 说明之后的位置 两数相加都会 大于 x,再找之后位置两数之差原创 2020-07-17 08:34:45 · 205 阅读 · 0 评论 -
Hello 2020 D. New Year and Conference
题目链接题意:有 n 个事件,在 A 会议室开会的时间段是 abegin aend, 在 B 会议室开会的时间段是bbegin bend。 现在的要求是在 A 会议室中任意事件相交,那么在 B 会议室中这些事件也要相交, 同理,在 B 会议室中任意事件相交,那么在 A 会议室中这些事件也要相交, 如果满足条件 输出 YES , 否则输出 NO。思路:对于所有的事件, 我们按照在 A 会议室...原创 2020-01-20 15:58:22 · 159 阅读 · 0 评论 -
P5324 [BJOI2019]删数 (线段树 求区间 0 的个数)
题目描述对于任意一个数列,如果能在有限次进行下列删数操作后将其删为空数列,则称这个数列可以删空。一次删数操作定义如下:记当前数列长度为kk,则删掉数列中所有等于kk的数。现有一个长度为nn的数列aa,有mm次修改操作,第ii次修改后你要回答:经过ii次修改后的数列aa,至少还需要修改几个数才可删空?每次修改操作为单点修改或数列整体加一或数列整体减一。输入输出格式输入格...原创 2019-05-16 22:25:14 · 934 阅读 · 0 评论 -
bzoj 3262: 陌上花开 (CDQ +树状数组)
Description有n朵花,每朵花有三个属性:花形(s)、颜色(c)、气味(m),用三个整数表示。现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量。定义一朵花A比另一朵花B要美丽,当且仅Sa>=Sb,Ca>=Cb,Ma>=Mb。显然,两朵花可能有同样的属性。需要统计出评出每个等级的花的数量。Input第一行为N,K (1 <= N ...原创 2019-03-12 00:16:02 · 276 阅读 · 0 评论 -
bzoj 1103: [POI2007]大都市meg (dfs 序 + 树状数组)
Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了。不过,她经常回忆起以前在乡间漫步的情景。昔日,乡下有依次编号为1..n的n个小村庄,某些村庄之间有一些双向的土路。从每个村庄都恰好有一条路径到达村庄1(即比特堡)。并且,对于每个村庄,它到比特堡的路径恰好只经过编号比它的编号小的村庄。另外,对于所有道路而言,...原创 2019-03-16 12:49:29 · 109 阅读 · 0 评论 -
Gym F Rectangles (线段树,扫描线。)
求相交面积 为奇数次的面积总和。就是随便改一下原来扫描线的代码。 ,#include <bits/stdc++.h>using namespace std;const int N = 2e5;struct node{ int y,x1,x2; int flag; bool operator < (const node &a...原创 2019-02-28 21:01:40 · 314 阅读 · 0 评论 -
bzoj 2743: [HEOI2012]采花
Description萧芸斓是Z国的公主,平时的一大爱好是采花。今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采花。公主每次采花后会统计采到的花的颜色数,颜色数越多她会越高兴!同时,她有一癖好,她不允许最后自己采到的花中,某一颜色的花只有一朵。为此,公主每采一朵花,要么此前已采到此...原创 2018-12-24 12:43:19 · 233 阅读 · 0 评论 -
Luogu P3373 【模板】线段树 2
如题,已知一个数列,你需要进行下面三种操作:1.将某区间每一个数乘上x2.将某区间每一个数加上x3.求出某区间每一个数的和 #include <bits/stdc++.h>#define mem(x,v) memset(x,v,sizeof(x)) #define go(i,a,b) for (int i = a; i <= b; i++)#d...原创 2018-09-15 23:43:55 · 145 阅读 · 0 评论 -
Luogu P1438 无聊的数列 (线段树)
题目背景无聊的YYB总喜欢搞出一些正常人无法搞出的东西。有一天,无聊的YYB想出了一道无聊的题:无聊的数列。。。(K峰:这题不是傻X题吗)题目描述维护一个数列{a[i]},支持两种操作:1、1 L R K D:给出一个长度等于R-L+1的等差数列,首项为K,公差为D,并将它对应加到a[L]~a[R]的每一个数上。即:令a[L]=a[L]+K,a[L+1]=a[L+1]+K+D,...原创 2019-05-26 12:41:50 · 147 阅读 · 0 评论 -
Luogu P2487 [SDOI2011]拦截导弹 (CDQ + 线段树)
思路:正反两个 CDQ , ll[i] // 从左到右最长序列 rr[i] // 从右到左最长序列 lnum[i] //包含 i 这个数,有多少个最优方案,从左到右 rnum[i] //包含 i 这个数,有多少个最优方案, 从右到左。 这个题首先要离散化, CDQ 我们先 递归先找左面的, 然后当前点的, 最后...原创 2019-05-23 19:13:04 · 261 阅读 · 0 评论 -
LCIS HDU - 3308 (线段树,区间合并,求连续最长严格上升序列)
思路:线段树记录三个值,从左到右的,从右到左的,还有一个区间最长的,值得注意的一点就是 pushup 的时候 要仔细,不要少合并了.#include<bits/stdc++.h>#define lson now << 1#define rson now << 1 | 1using namespace std;const int N...原创 2019-07-14 14:48:35 · 214 阅读 · 0 评论 -
bzoj 1935: [Shoi2007]Tree 园丁的烦恼 ( 树状数组 )
题目:就是求矩形内点的个数这个没有修改,但是数据范围很大,所以要离散化,用树状数组就好了,没有必要用 CDQ .求ans 的时候,分成求 四个点到原点的矩阵和,加加减减就好了#include<bits/stdc++.h>#define low(x) (x & (-x))using namespace std;const int N = 1e6+10;...原创 2019-07-15 15:57:30 · 162 阅读 · 0 评论 -
HDU 6562 Lovers (线段树)
题意:有 n 个字符串,每个字符串一开始是空的.然后有 m 个操作, 两种类型,一个是修改,一个是查询,修改操作: x y z 区间[x ,y] 中的每个字符串的首尾都加上一个数字 z, 这个 z 是一个数字字符查询操作: x y , 区间 [x , y] 中把字符串转换为数字然后全加起来 是多少.这里有 五个变量:val1 就是每个区间的最终答案val2 就是每个区间...原创 2019-07-16 19:15:35 · 152 阅读 · 0 评论 -
HDU - 4578 Transformation (线段树 有点复杂)
这个博客讲的很详细了。但是有一个地方是错误的https://blog.csdn.net/HelloWorld10086/article/details/48084941这个地方要在乘 一个 b。代码:#include<bits/stdc++.h>#define ls now << 1#define rs now << 1 | 1u...原创 2019-07-12 16:16:45 · 99 阅读 · 0 评论 -
2019牛客暑期多校训练营(第七场) E (线段树, 点代表一个区间)
给你的区间 是 1e9 的,所以需要我们离散一下,然后每个点代表一个区间就可以了.思路:首先我们考虑到 N 是4e5 的,所以说不同点的个数最多就是 2*N 的,我们就可以用线段树来做 了.方法一:我们考虑离散一个区间,把 右区间的端点 +1,区间算是左闭右开的, 这样算一个区间的值就是 右端点的值减去左区间的值.我们就可以用 左区间的值代表整个区间.[1,...原创 2019-08-09 14:29:54 · 464 阅读 · 9 评论 -
2019牛客暑期多校训练营(第七场)F Energy stones (树状数组 + set)
题目:一开始有 n 个石头, 每个石头都有一个初始的 能量 e[i] , 然后时候的能量以每秒 l[i] 的速度增加, 每个石头的能量有一个上限 c[i].现在有 m 个询问, t, l, r, 代表在 t 秒, 询问 区间 [l,r] 的石头能量之和, 然后询问之后区间的石头能量变成 0.最后输出一个答案, 所有能量之和.思路:考虑每个石头对答案的贡献, 首先要算出来...原创 2019-08-09 20:22:24 · 379 阅读 · 0 评论 -
bzoj 2957 楼房重建
小A的楼房外有一大片施工工地,工地上有N栋待建的楼房。每天,这片工地上的房子拆了又建、建了又拆。他经常无聊地看着窗外发呆,数自己能够看到多少栋房子。 为了简化问题,我们考虑这些事件发生在一个二维平面上。小A在平面上(0,0)点的位置,第i栋楼房可以用一条连接(i,0)和(i,Hi)的线段表示,其中Hi为第i栋楼房的高度。如果这栋楼房上任何一个高度大于0的点与(0,0)的连线没有与之前的线...原创 2018-08-27 14:17:17 · 126 阅读 · 0 评论 -
树状数组 + 线段树
线段树单点更新,单点查询。单点更新,区间查询。区间修改,区间查询。线段树的基本操作。 POJ 3468 A Simple Problem with Integers 区间修改区间查询。 查询是否有一段连续的区间没有被覆盖,优先找左边的。+ 区间修改。 POJ - 3667 Hotel 线段树区间修改,区间亦或,区间求和,区间查询被覆盖的最长长度。综合题。...原创 2018-08-27 09:14:40 · 212 阅读 · 0 评论 -
bzoj 2434: [Noi2011]阿狸的打字机 (AC自动机,dfs序,BIT)
[Submit][Status][Discuss]Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机。打字机上只有28个按键,分别印有26个小写英文字母和'B'、'P'两个字母。经阿狸研究发现,这个打字机是这样工作的:l 输入小写字母,打字机的一个凹槽中会加入这个字母(这个字母加在凹槽的最后)。l 按一下印有'B'的按键,打字机凹槽中最后一个字母会消失...原创 2018-08-22 20:41:41 · 148 阅读 · 0 评论 -
A Simple Problem with Integers (线段树,区间修改,lazy)
You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is to ask for the ...原创 2018-05-29 09:14:21 · 421 阅读 · 0 评论 -
Hotel POJ - 3667 (线段树,区间合并)
The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a vacation on the sunny shores of Lake Superior. Bessie, ever the competent travel agent, has named the Bul...原创 2018-05-30 19:51:52 · 282 阅读 · 0 评论 -
Gym - 100712L Alternating Strings II (线段树 + dp)
题目链接题意: 给你一串 01 序列,最少切几刀,使得每串的长度不超过 m 且 这个串不能是交替的 (从第二位开始,每个字符都与前面一个字符不一样。)状态转移方程。 f[i] = min(f[i],f[j] + 1); 满足 j+1到i是可行子串。这样的是暴力的方程。肯定过不了这个题。仔细一想的话,f[i] 能从什么地方转移过来,是 i-m+1 到 i-1, 在想一想满足条件...原创 2018-07-25 07:37:36 · 160 阅读 · 0 评论 -
POJ - 2777 Count Color (二进制优化,该区间,查区间)
Chosen Problem Solving and Program design as an optional course, you are required to solve all kinds of problems. Here, we get a new problem. There is a very long board with length L centimeter, L is...原创 2018-07-19 18:10:46 · 168 阅读 · 0 评论 -
AtCoder - 2581 Meaningful Mean 树状数组+离散化。
You are given an integer sequence of length N, a= {a1,a2,…,aN}, and an integer K.a has N(N+1)⁄2 non-empty contiguous subsequences, {al,al+1,…,ar} (1≤l≤r≤N). Among them, how many have an arithmetic mea...原创 2018-07-14 12:15:52 · 233 阅读 · 0 评论 -
POJ - 2528 Mayor's posters (线段树 离散化 改区间求一次共有多少种颜色)
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 d...原创 2018-07-20 11:24:08 · 108 阅读 · 0 评论 -
HDU - 1540 Tunnel Warfare (线段树,更新点,查找包含某点的区间)
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 t...原创 2018-07-20 13:32:10 · 168 阅读 · 0 评论 -
POJ - 2104 K-th Number (线段树,平方分割)
题目链接题意,给你一组数据,m 个询问每次询问,区间 [ i , j ] 中第 K 大的数是多少,两个算法,一个是线段树,一个是平方分割。一、线段树,这次线段树的每个节点上记录的不是数值了,而是保存了一个序列。然后二分结果,在线段树种查询这个结果在区间中排多少,最终把值找出来,线段树节点保存数列是有序的,用到 STL 的一个merge 函数把两个儿子的数列合并。前提是两...原创 2018-07-26 21:00:09 · 241 阅读 · 0 评论 -
POJ - 2991 Crane (线段树 线段角度改变)
题目链接有N条线段,初始状态全部竖直向上,在每条线段的最上方有一个可以旋转的关节点。当一个关节点旋转时,它上面所有的线段都会跟着旋转。每次旋转后,求最上面一个关节点的坐标 区间修改。每个节点 存一个向量,从起始点指向结束点,还要存一个要转到既定位置,要转多少角度。题目给的是角度,我们要换成 rad 形式。题目给的角度并不是我们在线段树种存的角度。 求一个向...原创 2018-07-27 15:09:21 · 216 阅读 · 0 评论 -
HDU - 1542 Atlantis (线段树,扫描线求面积)
There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, these maps describe diff...原创 2018-07-22 23:25:56 · 167 阅读 · 0 评论 -
(POJ) Housewife Wind (LCA + BIT)
【题意】给一个数,边之间有权值,然后两种操作,第一种:求任意两点的权值和,第二,修改树上两点的权值思路:这个题我 用的是 LCA + BIT题目的要求是求两点之间的最短距离,然后还可以修改 边 的长度,修改的话,我们可以用树状数组来维护,,我们先找 dfs 序,一个点的时间戳有两个, 然后时间戳包含的就是自己的下面节点。我们在维护树状数组的时候,在 in 时间戳 加valu...原创 2018-08-09 16:14:22 · 134 阅读 · 0 评论 -
Codeforces 834D The Bakery (DP + 线段树)
Description 给出一个长度为n的序列,把其分成k段连续的子段使得这k段每段中不同数字的个数之和最大 Input 第一行两个整数n和k表示序列长度和要分成的段数,之后n个整数a[i]表示该序列(1<=n<=35000,1<=k<=min(n,50),1<=a[i]<=n) Output 输出分成k段后每段中不同数字个数之和的最大值 Sample I...原创 2018-08-09 19:22:26 · 132 阅读 · 0 评论 -
HDU snacks (线段树 + dfs序)
Problem Description百度科技园内有个零食机,零食机之间通过条路相互连通。每个零食机都有一个值,表示为小度熊提供零食的价值。由于零食被频繁的消耗和补充,零食机的价值会时常发生变化。小度熊只能从编号为0的零食机出发,并且每个零食机至多经过一次。另外,小度熊会对某个零食机的零食有所偏爱,要求路线上必须有那个零食机。为小度熊规划一个路线,使得路线上的价值总和最大。 ...原创 2018-08-09 23:48:59 · 193 阅读 · 0 评论 -
CodeForces 838B - Diverging Directions (线段树,dfs序,LCA)
n 个点 2n-2 条有向带权边的图,其中编号 1~n-1 的边一定形成一个 1 号点为根的生成树。 编号n~2n-2 的边一定是从点 i ([Math Processing Error]i≠1 且 i 点各不同) 到点 1 .有 q 个询问,询问有两种类型:1 i w :将第 i 号边的权值(距离)修改为 w 。 2 u v :求 u 到 v 的最短路。 思路:我们先跑一...原创 2018-08-10 21:27:23 · 302 阅读 · 0 评论 -
HDU - 3397 Sequence operation (线段树,区间修改,亦或,查询,以及最长连续的1)
有5个操作,0 区间全部置为01 区间全部置为12 区间的值取反,1 变0 ,0变1,3 求区间1 的个数。4 求区间连续最长的1. 思路:lazy标记, 有 -1,0,1,2, 四种标记,-1 是什么都没有,0,1 算是一种操作,区间修改,2 是一种操作,亦或。 因为亦或这个操作。我们存一下1 的所有数据,0的所有数据,便于以后交换。我们...原创 2018-08-11 18:55:43 · 429 阅读 · 0 评论 -
HDU - 5649 DZY Loves Sorting (线段树还能这样用)
https://vjudge.net/problem/HDU-5649题意:一个n的排列,然后执行Q次操作,每次操作是对某个区间从小到大排序或者是从大到小排序。最后只查询一次,输出第k个位置当前的数。思路:这个题只查询了一次,所以有了特殊的解法。我们二分答案,直接枚举最后的答案。然后把原来的数列中 大于等于这个答案的置为一,小于这个答案的职位零,然后用线段树操作,就成了 区...原创 2018-08-13 19:46:20 · 277 阅读 · 0 评论 -
中中的rp
昨天,BDEZ,5F秘密基地 -- 话说我们的中中经过救援行动的一番折腾,终于不幸透支,休克住院……于是乎BDEZ的OIer们经过商议,决定过两天跑到医院慰问中中……描述BDEZ的OIer们还有别的事情要做,不可能一直呆在医院陪中中,所以OIer们经过紧急会议决定:所有人排成一列,所有人按时间表a访问,针对第i个同学,其访问的时间为a[i]分钟。 回到这边,原创 2016-11-15 09:47:34 · 224 阅读 · 0 评论