![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
线段树
线段树
谁是凶手1703
这个作者很懒,什么都没留下…
展开
-
poj 3468【线段树】【lazy标记】【爆int的技巧】
https://cn.vjudge.net/problem/POJ-3468区间更新,区间查询#include<iostream>using namespace std;typedef long long ll;const int N=1e6;struct node{ int l,r; ll sum,lazy;};node tree[N*4];int...原创 2019-08-21 20:56:43 · 105 阅读 · 0 评论 -
楼兰图腾【数状数组】
题目传送门在数状数组求逆序对的算法,我们可以知道如何在一个序列中计算每一个数后面有多少个数比它小,类似 可以搞到其他属性#include<iostream>#include<algorithm>#include<string.h>using namespace std;const int N=2e5+100;typedef long long ...原创 2019-08-31 14:52:49 · 194 阅读 · 0 评论 -
一个简单的整数问题【树状数组】【维护前缀和】
题目传送门树状数组可以维护前缀和区级更新可以差分数组的思想单点查询 正常查询#include<iostream>#include<algorithm>using namespace std;const int N=1e5+100;typedef long long ll;//树状数组维护b的前缀和ll a[N],b[N];int n,m;ll l...原创 2019-08-31 15:34:31 · 273 阅读 · 0 评论 -
poj3468【树状数组】【区间修改】【区间查询】
题目传送门区间修改用差分数组区间查询 修改公式#include <bits/stdc++.h>using namespace std;#define ll long long#define lowbit(x) x&(-x)const int N=2e5;ll c1[N],c2[N],n,m,a[N];ll add(ll x,ll y){ for(...原创 2019-09-02 15:43:58 · 130 阅读 · 0 评论 -
迷失的牛【poj2182】【树状数组】【01前缀二分】
题目传送门有n头奶牛,已知它们的身高为 1~n 且各不相同,但不知道每头奶牛的具体身高。现在这n头奶牛站成一列,已知第i头牛前面有Ai头牛比它低,求每头奶牛的身高。题目的性质:1~n各不相同倒序扫描:第k头牛前面有Ak头牛比它低,那么他的身高Hk是数值1~n中第Ak+1没有出现过的数,倒序扫描一遍标记一个答案在这里插入代码片我们可以把1~n都标记1;从n倒序扫描每个数,我们需...原创 2019-09-02 17:11:52 · 232 阅读 · 0 评论 -
分块模板【大段维护 局部朴素】
#include <bits/stdc++.h>using namespace std;const int MAXN = 5e4 + 10;int T, n, block, num, L[MAXN], R[MAXN], belong[MAXN], sum[MAXN], a[MAXN];void build (){ memset (sum, 0, sizeof...原创 2019-09-02 17:42:07 · 102 阅读 · 0 评论 -
第八大奇迹【区间查询第8大数】
第八大奇迹单点修改、区间查询第8大数思路线段树,节点里面必须存,区间的第8大的数。考虑,父节点能不能由俩子节点更新。直接是不能的,得加一些变量,为了维护父节点的第8大数,我们得知道,子节点的前8个数。然后像归并排序一样,更新。代码#include<iostream>#include<queue>#include<string>#include<vector>#include<algorithm>using namespac原创 2020-11-03 13:33:41 · 196 阅读 · 0 评论 -
扫描线总结【线段树特殊性质,没有pushdown、query操作】
扫描线题意多个矩阵求交集,线段树的特殊操作,非常特殊的情况,一堆证明之后,就没有pushdown操作。没有pushdown操作,也没有query操作,直接tr[1].len.亚特兰蒂斯由于点可能有小数,先l、离散化为整数,这里的线段树存的是一个区间:【L,R),左闭右开的区间。 换句话:线段树存的是第几个小区间,那么操作(l,r)的话,对线段树操作:l–r-1就够了,(存的不是点,是小区间,小区间比点的数量少1)另外,也不需要query()函数,之间调用tr[1].len,返回线段长度代码#原创 2020-10-13 20:57:46 · 288 阅读 · 0 评论 -
树状数组总结
树状数组总结动态求前缀和的数据结构。可以解决的问题:数组中单点修改,求区间前缀和;区间修改,求区间前缀和;求逆序对;求数组中动态删去一个数时,第k大数等等。求逆序对(楼兰图腾)题意用树状数组求出,每个数之前有多个数大与这个数的,小于这个数的(正向循环)用树状数组求出,每个数之后有多少个与这个数的,小于这个数的,(反向循环)代码#pragma comment(linker, "/STACK:1024000000,1024000000")#include <stdio.h>原创 2020-09-29 12:55:29 · 94 阅读 · 0 评论 -
区间最大公约数
title: 区间最大公约数tags:线段树最大公约数categories:数据结构线段树date: 2020-04-13 15:21:56题意:区间加,询问区间最大公约数思路区间加= = 差分序列= =单点修改=pushup询问区间最大公约数,gcd(左区间,右区间)(X,Y,Z)的最大公约数,可以直接求区间最大公约数的一个性质:(X,Y,Z)=(X,...原创 2020-04-13 15:47:42 · 247 阅读 · 0 评论 -
区间最大公约数【树状数组+线段树】
思路:首先是线段树的做法定义node节点,求公约数,那么定义d(记录区间公约数),还有左节点右节点考虑定义一个数d,能不能维护好update父节点的d = max(左树d,右树d),所有一个数d,够用考虑区间加,可以使用差分数组b[i]=a[i]=a[i-1]考虑区间求最大公约数(a,b,c)=(a,b-a,c-b)//公约数性质b-a,c-a可以看成差分数组a,b,c都加d,...原创 2020-02-14 15:58:52 · 207 阅读 · 0 评论