ACM_线段树
yiqzq
人生如此复杂,机会多得像稠密图,我们没理由认输。尽管我们走不了最短路,但图仍是连通图,TLE之前,没有一个节点叫失败。
展开
-
csu 1542: Flipping Parentheses(线段树)
题意:先给出一个符合括号匹配的字符串,然后Q次操作 每次操作将某个括号反转,问将哪个括号反转能使字符串的括号再次匹配,位置要越靠近左端越好昨天打多校赛的时候死磕了两小时,最后30分钟想到了好像应该用线段树来做这题,然后发现时间不够了,就没有写。一定要好好补补这题。思路:这题要先对输入的数据进行一个预处理,因为题目输入的是一串合法的括号,不方便使用,所以我们令’(‘为1,令’)’为-1.那...原创 2018-05-07 10:39:12 · 189 阅读 · 0 评论 -
树分治 (线段树维护区间前k大)
原题地址:http://csustacm.com:4803/problem/1015思路:由于k很小,所以每次用线段树维护前k大的数字就行了. #include <bits/stdc++.h>#include <cmath>#define eps 1e-8#define INF 0x3f3f3f3f#define PI acos(-1)#defi...原创 2018-08-11 16:03:10 · 1079 阅读 · 0 评论 -
Codeforces Round #413 C. Fountains (线段树)
原题地址:http://codeforces.com/contest/799/problem/C题意:本题给我们给我们两种货币初始金额,每种货币分别对应能买不同种类的喷泉,每个喷泉有花费和价值 我们如果单纯建造两个喷泉在限定金额内的最大价值思路:有3种情况:1.建两个代价单位为 coinscoinscoins 的喷泉 2.建两个代价单位为 diamondsdiamondsdiam...原创 2018-08-18 10:50:40 · 286 阅读 · 0 评论 -
Gym 101466K K - Random Numbers (dfs序+数论+线段树)
原题地址:http://codeforces.com/gym/101466/problem/K题意:一棵树,每个节点都有一个权值,接下来有2种操作,一种是将节点u扩大k倍.一种是询问以节点u为根节点的子树的所有节点的乘积是多少,并且输出这个数字有几个因数.思路;首先用dfs序将树结构转换成线性结构,这个求子树的乘积就变成求区间的乘积.然后至于求一个数的因子个数,有唯一分解定理可以知道,假设...原创 2018-08-19 20:20:16 · 431 阅读 · 0 评论 -
FZU - 2297 Number theory (线段树)
原题地址:http://acm.fzu.edu.cn/problem.php?pid=2297题意:有一个默认初始值为1的x,给出一系列数据应用,每次输入一个大写字母’M’或者’N’以及一个整数。当大写字母为’M’时,表示这个x乘以后面的整数;当大写字母为’N’时,表示x整除后面整数所指的查询序号所输入的整数,问每次输入,输出的x的值为多少?答案对1e9+7取模。思路:考虑建立一棵以更新时...原创 2018-08-26 19:48:16 · 301 阅读 · 0 评论 -
fzu 2277 Change (dfs序+线段树)
原题地址:http://acm.fzu.edu.cn/problem.php?pid=2277题意:给定一棵根为1, n个结点的树. 有q个操作,有两种不同的操作 (1)1,v,k,x:a[v]+=x,a[v′]+=x–k(v′为v的儿子),a[v′′]+=x–2∗k(v′′是v′的儿子)...;(1)1,v,k,x:a[v]+=x,a[v′]+=x–k(v′为v的儿子),a[v″]+=x–...原创 2018-08-21 01:01:12 · 177 阅读 · 0 评论 -
Gym - 101350 F - Monkeying Around(线段树+树状数组)
原题地址:http://codeforces.com/gym/101350/problem/F题意:nnn只猴子坐在椅子上,有mmm次区间更新(笑话), 没听过这个笑话的猴子会掉到地上,原来听过这个笑话的猴子会做到椅子上。问你最后有几只猴子坐在椅子上 .思路:我们可以发现,每只猴子是否坐在椅子上只取决于它最后听到的笑话,这其实就可以等效为线段树区间染色问题,判断最后染的是什么颜色.然后我们可...原创 2019-04-06 21:37:50 · 309 阅读 · 0 评论 -
Gym101102 K.Topological Sort(线段树)
原题地址:http://codeforces.com/gym/101102/problem/K题意:给出一个n个点的图,初始状态i点会向所有编号大于它的点连边,之后删去m条边,求删边之后涂的字典序最小的拓扑序思路:按照暴力的方法,我们每次都要寻找一个入度为0,且编号最大的点,然后删掉所有从该点连出去的边。由于题目的条件,可以发现删度数是删一个区间的。可以发现,上述操作就是一个区间查询最小值,...原创 2019-05-07 20:04:20 · 165 阅读 · 0 评论 -
牛客895G 慢慢变小的序列(线段树)
原题地址:https://ac.nowcoder.com/acm/contest/895/G思路:题目对于每一个区间[L,R][L,R][L,R]都更新为min(A[i],(i−L)∗Y+X)min(A[i],(i-L)*Y+X)min(A[i],(i−L)∗Y+X),我们可以对后面的式子进行拆分,拆成i∗Y+(X−L∗Y)i*Y+(X-L*Y)i∗Y+(X−L∗Y),其中对于每次更新X−L∗Y...原创 2019-05-12 19:55:31 · 140 阅读 · 0 评论 -
牛客多校训练营2 E.MAZE(线段树+矩阵)
原题地址:https://ac.nowcoder.com/acm/contest/882/E题意:给出一个矩阵,0表示可走,1表示不可走,给出起点和终点,问从起点到终点的方案数。基本都是看了大佬的博客思路:主要就是对矩阵的理解。他每一行的dp状态都是可以通过上一行的状态转移过来了,所以就可以利用矩阵来转移。有n行,所以就会有n-1个矩阵,答案就是将这n-1个矩阵乘起来,然后取值就可以。所以...原创 2019-07-23 20:31:16 · 203 阅读 · 0 评论 -
HDU 6602 Longest Subarray(线段树)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=6602题意:给出一个序列,找到一个一个最长的串,使得这个串里的出现的每个数字的次数都>=k思路:我们可以枚举右端点r,那么对于这个右端点的数字,从右向左的第k个位置pos,在[1,pos]是合法的,(pos,r)是非法的,每次维护当前枚举的右端点r的合法左区间,如果合法就区间+1,非法就区间-...原创 2019-07-30 16:29:18 · 140 阅读 · 0 评论 -
HDU6638 Snowy Smile(二维离散化+线段树)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=6638题意:给出一个图,图上某些点藏有宝藏,可能是正数,可能是负数,现在需要你选择一个矩阵范围内的所有的宝藏,使得获得的权值和最大。思路:由于宝藏的范围是1e91e91e9,所以很明显是需要离散化的,(比赛的时候突然不会写二维离散化了,囧)二维离散化只需要把x和y分别存起来,然后排序去重,对于原坐标...原创 2019-08-08 09:25:35 · 240 阅读 · 0 评论 -
2019 牛客多校训练营7 E.Find the median(离散化+线段树)
原题地址:https://ac.nowcoder.com/acm/contest/887/E题意:有n次查询,每次查询将区间[l,r]内的数字填到一个序列中,问每次插入后的中位数是多少,查询不独立.思路:首先由于l,r的范围是1e9,所以如果不选择离散化可以使用线段树动态开点来写,但这题卡了空间写不了,所以考虑使用离散化后来写。由于离散化后这个是连续型区间(其实我也不是很懂),要将点化成区间...原创 2019-08-09 11:10:46 · 276 阅读 · 0 评论 -
HDU 4366 Successor (线段树)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=4366题意: 给你一棵树,每个结点有两个属性值,1:能力值 2:忠诚度然后m个询问,每次询问一个整数u,求u的子树中能力值大于u的且忠诚度最大的点的编号思路:首先如果不考虑能力值的要求,只考虑求忠诚度的要求,然后又因为这是在树上的,所以我们可以将树进行DFS转化为DFS序,这样之后就是求...原创 2018-08-14 20:29:06 · 237 阅读 · 0 评论 -
HDU 4553 约会安排(区间合并经典)
#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;map&gt;#include&lt;vector&gt;#include&lt;iostream&gt;#include&lt;algorithm&gt;#include&原创 2018-07-27 23:28:27 · 250 阅读 · 0 评论 -
HDU 1828 (扫描线求周长)
#include &amp;lt;algorithm&amp;gt;#include &amp;lt;cctype&amp;gt;#include &amp;lt;cmath&amp;gt;#include &amp;lt;cstdio&amp;gt;#include &amp;lt;cstdlib&amp;gt;#include &原创 2018-07-26 21:41:46 · 201 阅读 · 0 评论 -
poj 3468(线段树)
线段树lazy的pushdown的需要注意一点,究竟是+=还是=#include <iostream>#include <cstdio>#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;const int maxn = 1e5 + 5;typedef long long ll;ll sum[maxn原创 2018-04-20 20:32:48 · 191 阅读 · 0 评论 -
hdu1698 线段树区间更新,lazy标记
题意:一段线段由n条小线段组成,每次操作把一个区间的小线段变成金银铜之一(金的价值为3,银为2,铜为1),最初可当做全为铜;最后求这条线段的总价值。思路:也是线段树的入门题,这题主要是学习线段树的区间更新,lazy标记。因为对于区间来说,如果还是像单点更新一样,一个一个点的更新的话,那么所花费的时间就太多了。在我看来,使用lazy标记的好处就在于可以将区间更新的操作放在线段树内部进行,这样使得时间大原创 2018-04-20 16:15:45 · 186 阅读 · 0 评论 -
hdu2795 线段树
题意:大意:给一个h*w的格子,然后给出多个1*w的板子往格子里面填,如果有空间尽量往上一行填满,输出行数,无法填补,则输出-1;思路:初看这题时完全没发现这是一道线段树的题目。后来暴力wa了一发之后,又看了题解才发现是线段树。因为暴力的查找效率是O(n),效率太低,因此需要线段树O(logn)的复杂度来解题。题目有一个数据需要注意,n只有2e5,但是w和h都是1e9,所以如果h>n,可以令h=n,原创 2018-04-19 23:09:00 · 106 阅读 · 0 评论 -
线段树入门 hdu1166
基本是模板题,贴份代码#include <cstdio>#include <algorithm>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn = 5e4 + 5;int t, n;int sum[maxn << 2];void pushup(int rt) {原创 2018-04-19 21:26:34 · 189 阅读 · 0 评论 -
线段树区间更新之lazy标记
http://10.64.70.148/JudgeOnline/problem.php?cid=1015&pid=8(长沙理工大学内网)#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>#include <math.h>#include &am原创 2018-03-11 14:45:02 · 298 阅读 · 0 评论 -
线段树模板(结构体和非结构体写法)hdu1754
结构体写法#include #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define eps 1e-8#define pi 3.1415typedef long long ll;using namespa原创 2018-01-28 11:47:39 · 565 阅读 · 0 评论 -
HDU 1542 Atlantis(线段树+离散化+扫描线)
贴几个大佬的博客帮助理解https://blog.csdn.net/xingyeyongheng/article/details/8927732 http://www.aizhuanji.com/a/AWbkpGxj.html https://www.cnblogs.com/liwenchi/p/7259171.html https://blog.csdn.net/qq_18661257...原创 2018-07-24 19:00:39 · 211 阅读 · 0 评论 -
POJ 2528 Mayor's posters (线段树区间染色)
原题地址:http://poj.org/problem?id=2528原题地址:贴海报,后面的海报可以贴在前面的海报的上面,按给定的顺序在区间为(l,r)的位置去贴海报,问最后可以在表面看见的海报有多少张这题调bug调的我心态崩了。说一下我的问题 1.当用非结构体写法写线段树的时候,并且要像这题一样使用离散化,那么你就格外需要注意在updata或者query函数里面传进去的值了voi...原创 2018-07-25 09:32:26 · 287 阅读 · 0 评论 -
线段树区间合并 HDU 1540
贴大佬博客https://blog.csdn.net/qq_36368339/article/details/79175336https://blog.csdn.net/Roll_Keyboard/article/details/79269848、贴我的板子#include <bits/stdc++.h>#include <iostream>#inc...原创 2018-07-25 16:34:03 · 149 阅读 · 0 评论 -
HDU 多校第二场 1007 Naive Operations (线段树)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=6315 题意:给你两个长度为n的数组a、b,数组a初始化为0,数组b是1-n的排列 操作1:add x y 给数组a区间为x~y都加1。 操作2:quary x y 查询区间x~y内a[i] / b[i]的和,除法为整除(即向下取整)。思路:碰到区间问题,考虑线段树。 因为题目是b/a的整除...原创 2018-07-25 22:45:50 · 418 阅读 · 0 评论 -
HDU 3974 Assign the task (DFS序+线段树)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=3974题意:一家公司有n个人,编号1~n,每个人都有一个直属上司。 给你两种操作: 1:给x分配任务y,此时,x会将y也分配给他的下属,下属再分配给下属……也就是x下面的人都会放下原先的任务(如果有)而去做任务y。 2:询问x当前的任务,若没有则输出-1。思路:由于公司关系构成了一棵树...原创 2018-07-26 10:24:03 · 153 阅读 · 0 评论 -
HDU 1255 覆盖的面积(扫描线求区间交)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=1255思路:在写这题以前,强烈推荐先写完HDU1542然后这题相对于上面一题的区别就在于这题要求的是求覆盖两次的面积,上一题只要覆盖1次的面积.所以总的来说,区别主要是在与push_up这个函数上void push_up(int rt, int l, int r) { if...原创 2018-07-26 16:03:09 · 187 阅读 · 0 评论 -
CF 915E. Physical Education Lessons(动态开点线段树||离散化+权值线段树)
原题地址:https://codeforces.com/contest/915/problem/E题意:给出一个长为nnn的初始值全为111的区间,每次进行区间赋值,并且询问[1,n][1,n][1,n]的区间和。方案一:由于区间最大时1e91e91e9,所以普通的线段树不可行,但因为虽然区间很长,但是并不是所有的节点都要使用,因此可以使用动态开点线段树来维护区间和。具体操作就是对于每一个节...原创 2019-08-09 15:46:56 · 314 阅读 · 0 评论