随笔分类 - 线段树
摘要:区间加一个数以及求区间GCD 由性质gcd(a,b)=gcd(a,b-a)可得区间gcd可变为: gcd( a[l], a[l+1], a[l+2],..., a[r] ) = gcd( a[l], a[l+1] - a[l] , a[l+2] - a[l+1] ,..., a[r] - a[r-1
        阅读全文
                
摘要:给n个数,再给q次询问,每次询问回答区间[l,r]的a[l]%a[l+1]%a[l+2]%a[l+3]....%a[r]的答案。 可以知道只有当一个数遇到一个比它小的数答案才会改变且取模最多log次就会停止,所以用线段树暴力寻找一个数右边第一个比它小的数即可。 #include <bits/stdc
        阅读全文
                
摘要:给n个数,q次询问,每次问区间[l,r]的GCD以及整个区间内有多少个gcd为此的区间。 求区间gcd很好求,而有多少个这样的gcd,可以预处理出区间所有的gcd,因为一个n个数的区间最多有logn种gcd,所有暴力枚举即可。 #include <bits/stdc++.h> #define pb 
        阅读全文
                
摘要:给n个以原点为左下角的矩形,求最后图形右边界和上边界的周长和。 从后向前放矩形,线段树维护每个点左边最近的距离及下面最近的距离即可。 #include <bits/stdc++.h> #define lson l,mid,rt<<1 #define rson mid+1,r,rt<<1|1 #def
        阅读全文
                
摘要:正式比赛线段树第一题。 很裸的线段树,维护一个区间和及答案,答案由左右两边的答案及左边的区间和乘上右边的长度可得。 求答案的时候要线段树合并。 #include <bits/stdc++.h> #include <unordered_set> #include <unordered_map> #de
        阅读全文
                
摘要:和hdu5023一样不过询问不同。 #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <iostream> #define lson l,mid,rt<<1 #define rson
        阅读全文
                
摘要:染色覆盖问题,有q次操作,每次操作可以把一个区间染成一种颜色或者把询问一个区间有多少中颜色。 把一个区间拆分成线段树中的一个一个的小区间,查询的时候也一样,当我们要染的区间是一个大区间的一部分且大区间有颜色时,把大区间的颜色pushdown。 查询时当线段树的区间包含了我们要查询的区间就返回这个区间
        阅读全文
                
摘要:一道模拟题,每次给一个值只需要找从左到右第一个小于它的值,用线段树维护一个区间最小值即可。 只有当左儿子的最小值大于当前值才去找右儿子。 当时好像我们集体读错题了,但是我的代码依然可以a,不过忘了判断kkk是不是-1是真的真的真的很难受。 #pragma comment(linker, "/STAC
        阅读全文
                
摘要:权值线段树求第k小。 题意给n个数所有前缀中的逆序对数,构造出原序列。 第i个前缀减去第i-1个前缀就是第i个值插入序列后增加的逆序对,也就是说前面有这么多数比当前数大。那么i减去这个数代表当前数是前i个数的区间第k小。 维护一个权值线段树,初始节点权值分别为1...n。 从后向前考虑,每遇到一个数
        阅读全文
                
摘要:权值线段树求逆序对,题目依次把首数字移向尾部问最小逆序对。移动的时候查询更新一下就好。 #include <bits/stdc++.h> #define Lson l,mid,rt<<1 #define Rson mid+1,r,rt<<1|1 using namespace std; const 
        阅读全文
                
摘要:给n个数,有两个操作,第一个操作单点更新,第二个操作询问区间的最长严格连续递增子序列 因为是连续,所以线段树区间合并的时候答案只可能是两个子区间的答案或者合并后的中间拼接的最大值。 维护五个量,lnum区间左端点的值,rnum区间右端点的值,llen区间从左端点起的最长LCIS,rlen区间从右端点
        阅读全文
                
摘要:题目:线段树模板题。 代码: #include <cstdio>#include <algorithm>#include <string>#include <iostream>using namespace std;struct node{ int right,left; int sum;}tree
        阅读全文
                

 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号