线段树&&树状数组(论文,赶完了,学完扫描线再回来)
文章平均质量分 55
kuangbin为主,cf为辅,离散,
扫描线。
scau_sleep(今天写bug了吗?
1.一个退役acmer,老年选手
2. 今天喝水了吗?
3. 会写暴力~比不会写强~比不会写优秀
4.不会三分,喜提铁牌。
5. 失败一次不算什么,胸针为了拯救真由里 和 助手。重来3000多次都可以,那我失败几次,又算什么。(命运石之门)
-------如果说这是命运石之门的意志的话
展开
-
再入树状数组&&线段树
树状数组: 快速求前缀和。 修改某一个数。 一、缘由: 假如求[1,x][1,x][1,x]的前缀和,那么对它进行区间划分。 第一个:[x−2i1+1,x][x-2^{i_1}+1,x][x−2i1+1,x] (区间长度2inum2^{i_{num}}2inum=2i12^{i_{1}}2i1) 第二个:[x−2i1−2i2+1,x−2i1][x-2^{i_1}-2^{i_2}+1,x-2^{i_1}][x−2i1−2i2+1,x−2i1] (2inum2^{i_{num}}2inum原创 2021-02-04 00:40:04 · 95 阅读 · 0 评论 -
Educational Codeforces Round 137 (Rated for Div. 2) F Intersection and Union(线段树或者c++set)
线段树 或者 set原创 2022-10-18 22:11:48 · 252 阅读 · 0 评论 -
CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!) E. Bracket Cost(思维 括号匹配)
树状数组,思维,单调栈原创 2022-11-08 22:46:04 · 353 阅读 · 0 评论 -
区间修改部分(y总笔记),想了想,还是分开吧
区间修改&&区间查询(要pushdown) # include <bits/stdc++.h> using namespace std; typedef long long LL; const int N =5e5+10; struct Node{ int l, r; LL sum; int add; } tr[N<<2]; int w[N]; int n,m; void pushup(int u){ tr[u].sum = ...原创 2021-02-07 20:43:27 · 109 阅读 · 0 评论 -
线段树复习2 区间最大子段和
AC # include <bits/stdc++.h> using namespace std; const int N = 5e5+10; int w[N]; struct Node { int l, r; int mx; int pre,suf; int sum; } tr[N<<2]; void pushup(Node& u, Node &l, Node &r){ u.mx=max(l.suf+r.pre, ma原创 2021-02-04 14:40:37 · 82 阅读 · 0 评论 -
线段树原码复习
AC # include <bits/stdc++.h> using namespace std; const int N =2e5+10; struct Node{ int l, r; int mx; } tr[N<<2]; void pushup(int u){ tr[u].mx=max(tr[u<<1].mx,tr[u<<1|1].mx); } void build(int u, int l, int r){ if(l原创 2021-02-04 14:39:14 · 83 阅读 · 0 评论 -
差分树状数组后,支持区间查询
y总笔记 # include<bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1e5+10; int a[N]; LL tr1[N], tr2[N]; int n, m; int lowbit(int x){ return x&-x; } void add(LL tr[], int x, LL c){ for(int i = x; i<= n; i += lowbit(原创 2021-02-04 00:42:04 · 81 阅读 · 0 评论 -
AtCoder Beginner Contest 190 F - Shift and Inversions(逆序数&&树状数组&&优化)
F - Shift and Inversions原创 2021-01-30 23:58:09 · 173 阅读 · 0 评论 -
Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal(树状数组&&贪心)
E. String Reversal 题意: 给你一个串,现在只允许交换相邻元素来使得这一个串逆置。 求: 最小操作步数。 思路: 每个位置都贪心的找最近的(这里可以预处理)。 每操作一次后:对于从后面 换到前面的字符,使得整体的长度减少1. 这里可以用树状数组去维护。 假如 一个位置(reverse串) 的字符在后面(原串)。那么他要交换pos-1-val次。(val为已经移动到前面的个数)(因为每个pos都唯一,所有的pos是【1,n】。那么计算时直接加上。每次计算时减去val即可) AC #inc原创 2020-10-11 23:30:32 · 131 阅读 · 0 评论 -
HDU 6638二维扫描线+二维最大子段和+离线
Snowy Smile HDU - 6638 题解看这位大佬,讲的很详细了。 传送门 反思: 本题做的时候,已经想到二维子段和了,但不知怎么维护。 看了题解,原来要用线段树,之后暴力算答案。 先只看纵坐标,即只看y时(即一条水平的扫描线时),那么先暴力枚举所有可能的矩形(这些矩形,只知道上下界,左右边界还是未知的) 对于每一次枚举y上界时(即一条水平的扫描线时),可以看一下这条水平扫描线y上是否有点,有就加入到【1,cntx】的线段树里,根据x坐标,往区间里进行点修改(由于数据坐标有1e9,所以要先离线原创 2020-08-07 01:08:59 · 220 阅读 · 0 评论 -
HDU-5542(树状数组+LIS(dp))
The Battle of Chibi HDU - 5542(dp) 题意: 给你一个数组,要求你找到有多少组长度为m的严格递增序列 思路: 先是最长上升子序列。 之后就是方案数。dp[i][j]dp[i][j]dp[i][j]考虑第 iii 个位置,长度为 jjj 的值。(这里已经两层for了) 那么dp[i][j]=∑p=1i−1dp[p][j−1]dp[i][j]=\sum_{p=1}^{i-1}dp[p][j-1]dp[i][j]=∑p=1i−1dp[p][j−1](且a【p】原创 2020-08-05 21:16:24 · 190 阅读 · 0 评论 -
2020牛客暑期多校训练营(第六场)c--e--k
C----Combination of Physics and Maths(有点像浓度不等式) 思路: AC 在这里插入代码片 E----Easy Construction(挺经典的构造) 思路: 可以由sum(n)一定要满足,n∗(n+1)/2==k(modn)n * (n+1)/2==k(modn)n∗(n+1)/2==k(modn). 如果n为odd,那么k肯定为0。n为even,那么k为n/2。 具体看代码。 AC 在这里插入代码片 ...原创 2020-07-27 22:52:39 · 143 阅读 · 0 评论 -
poj2155-二维树状数组 区间更新&&单点查询
Matrix POJ - 2155 关于二维,我推荐这位博主 给定 n* n 矩阵A,其元素为0或1. A [i][j] 表示第i行和第j列中的数字。最初全为0. 我们有两个操作: C x1 y1 x2 y2(1 <= x1 <= x2 <= n,1 <= y1 <= y2 <= n)将左上角为(x1,y1),右下角为(x2,y2)的矩阵翻转(0变成1,1变成0)。 Q x y(1 <= x,y <= n)查询A [x][y],输出答案。 Input原创 2020-07-17 19:48:57 · 95 阅读 · 0 评论 -
hdu1556-树状数组 区间更新&&单点查询 (入门题,差分维护)
Color the ball HDU - 1556 N个气球排成一排,从左到右依次编号为1,2,3…N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗? Input 每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。原创 2020-07-17 18:01:17 · 144 阅读 · 1 评论 -
[kuangbin带你飞]专题七 线段树(poj-2528,区间染色+离线)
D - Mayor’s posters POJ - 2528 题意: 给你一个区间,每次都对一个子区间染色,颜色会覆盖。 问:最后有多少种颜色。 思路: 数据很大,直接线段树会超。所以先离线 离线后,就是线段树的常规操作了。之后就读一个区间就把这个区间染色。 pushdown时把当前区间的颜色传递给【a,mid】和【mid,b】。而【a,b】的颜色置为0,(一次次的pushdown,总会到单点,方便dfs考察时要考察单点的颜色) dfs统计所有的单点有多少种颜色。 反思: 离线时的 For(i,原创 2020-05-19 14:04:51 · 150 阅读 · 0 评论 -
[kuangbin带你飞]专题七 线段树--HDU1698 (线段树基本区间操作,这里用区间染色的方法去做)
E - Just a Hook HDU - 1698 题意: 有一条钩子,初始时颜色为铜(value为1),长度为n。 问你进行m次区间颜色的改变后,总价值。 思路:(染色) AC #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define mst(x,a) memset(x,a,sizeof(x)) #define For(i,x,y) for(r原创 2020-05-14 14:50:39 · 134 阅读 · 0 评论 -
[kuangbin带你飞]专题七 线段树 poj-3468(板子,区间和,查询区间和)
C - A Simple Problem with Integers POJ - 3468 AC #include <iostream> #include <cstdio> #include <cstring> #define For(i,x,y) for(register int i=(x); i<=(y); i++) using namespace std; typedef long long ll; const int maxn=1e5+10; int a[m原创 2020-05-14 14:46:50 · 106 阅读 · 0 评论 -
[kuangbin带你飞]专题七 线段树 A HDU - 1166 (模板题)
A - 敌兵布阵 HDU - 1166 思路: 板子题目 AC #include <iostream> #include <cstdio> #include <cstring> #define For(i,x,y) for(register int i=(x); i<=(y); i++) using namespace std; typedef long long ll; const int maxn=5e4+10; int a[maxn]; int n,m;原创 2020-05-14 14:44:40 · 124 阅读 · 0 评论