
线段树
文章平均质量分 56
数据结构---线段树
(xsj)
模拟只会猜题意
贪心只能过样例
DP一般看规律
数论只会gcd
计算几何瞎暴力
图论只会匈牙利
数据结构没学过
字符串只能干输入
展开
-
2017 ICPC西安 H Arrangement for Contests
题面题解线段树板子吧,维护一个区间最小值,懒标记更新即可代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e5 + 10;int T, n, k;ll a[N];struct Node { ll l, r; ll minn;// 最小值 ll lazy; //向下更新懒标记} tr[N * 4];//由子节点更新父节点原创 2021-05-24 11:31:42 · 244 阅读 · 0 评论 -
算法竞赛进阶指南---(线段树+懒标记)旅馆
题面题解我们可以将其看作是一个01串,初始全部为0 。操作1 :找到最靠左的长度为len的全部为0的串,输出左端点,并将这个区间全部变成1,如果不存在就输出0 ; 操作2,把左端点为l,长度为len的串全部变为0转化之后,我们首先要维护的信息就是区间内最长的0串的长度d,再看d,可能是左右儿子两部分的,如图,我们还要有以左端点开始的最长0串的长度ld和以右端点结尾的最长0串的长度rd ,对于ld,如果左儿子的d等于自身长度,那么 u.ld = l.d+r.ld ,rd也一样对于区间修改原创 2021-04-16 15:38:03 · 181 阅读 · 0 评论 -
算法竞赛进阶指南 (线段树+懒标记) 一个简单的整数问题2
题面题解代码原创 2021-04-16 11:28:27 · 124 阅读 · 0 评论 -
acwing 1275 最大数
题面题解因为题中最多m次操作,所以最多有m个节点,那么我们就可以提前建立一颗M*4节点的线段树,那么对于A操作,就变成了在某一个位置修改数,那么Q操作就变成了查询区间的最大值,其他就是线段树模板了代码#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>using namespace std;const原创 2021-04-15 08:25:15 · 139 阅读 · 0 评论 -
算法竞赛进阶指南---0x43(线段树)interval GCD
题面题解两个操作,给一段区间加上一个数,查询区间的最大公约数,我们知道,对于不加懒标记的线段树只能做到单点修改和区间查询,要想区间查询就要加上懒标记,但是我们再仔细思考,题中只有一个区间修改操作,给一段区间的每一个数加上一个数,是不是很熟悉,没错,就是差分,我们可以利用差分数组,只需要给区间的左右端点修改就可以达到对区间所有数的修改 设 b 数组是差分数组,给原数组区间[l,r] 加上一个c ,就可以变成 b[l]+=c , b[r+1]+=c;对于查询区间的最大公约数呢,我原创 2021-02-17 21:50:19 · 218 阅读 · 0 评论 -
算法竞赛进阶指南---0x43(线段树) 你能回答这些问题吗
题面输出样例5 31 2 -3 4 51 2 32 2 -11 3 2输入样例2-1题解单点修改,区间查询,经典线段树问题,一般单点修改不会用到懒标记(pushdown操作),问题就会简单点我们做线段树的题一般先确定节点中的属性,然后再做,那么节点中的属性有哪些,最基本的就是区间的左右端点 l , r 。 还有就是题中要求的最大连续字段和 lmax 。有了这三个,我们就要考虑能不能由子节点来更新出父节点的 lmax ,显然是不行的, 看图对于不跨区间的情况,我们原创 2021-02-16 21:28:51 · 469 阅读 · 0 评论 -
AHOI2009 维护序列 (线段树+懒标记)
原题链接思路题意让维护区间,涉及操作有区间修改和区间查询,很明显的线段树+懒标记再看需要维护的信息,就是线段树的节点,首先肯定有左右两个端点 l , r ,然后就是区间和 sum ,再有就是懒标记区间加add,区间乘 mul有加有乘,那么我们就要确定优先级,如果是先加再乘,区间和是不好维护的,可以自己证明,所以我们先乘再加,例如 x * mul1 +add1 +add2 懒标记可以更新成 mul = mul1 ,add=add1+add2 ;(x * mul1 +add) * mul2 懒原创 2021-01-28 18:07:27 · 335 阅读 · 0 评论