
树状数组
文章平均质量分 63
Brightess
毕业于湖南城市学院
目前在某游戏大厂搬砖(
展开
-
Codeforces Round #791 (Div. 2) C - Rooks Defenders(树状数组)
题目来源B Rooks Defenders点此进入题面题意:给出一个棋盘,每次 有两种操作:① 向某一格放入一个石头(在某一格放入石头,则 该行该列都会受到攻击)② 询问某个矩阵中是否所有方格都受到了攻击。思路:行列分开讨论,使用 两个一维树状数组 分别维护 行(tI)、列(tII) 的 单点修改,区间查询 功能(行、列 是否有被攻击,也可直接用布尔数组)用 Hash 表 分别记录 行(hahI[] 数组)、列(hahII[] 数组) 的石头数量,对于 某一行 或 某一列原创 2022-05-18 21:52:21 · 290 阅读 · 0 评论 -
Codeforces Round #790 (Div. 4)(A ~ H2 全解析)
A Lucky?点此进入题面题意:思路:模拟#pragma GCC optimize("Ofast")#pragma GCC optimize("inline")#include<bits/stdc++.h>using namespace std;//#define int long longtypedef long long ll;typedef vector<int> vi;typedef pair<int, int> pii;type原创 2022-05-12 16:12:20 · 1375 阅读 · 2 评论 -
2022牛客寒假1 Baby‘s first attempt on CPU(树状数组做法 + 贪心)
题目描述一共有 n 个语句。若语句 i 向语句 j 调用(j < i),则这里两个语句之间必须 至少间隔三个语句(其中包括了 空语句 和 非空语句),否则会出现问题。题目输出给定语句调用表。你要插入最少数量的空白语句,来满足所有语句调用没有问题。题目可能较难理解,我们根据样例进行进一步解释:样例输入:4 //第一行包括一个整数 n ,表示 程序原有语句总数0 0 01 0 00 1 00 0 0// 上面 n 行,第 i 行描述了第 i 条程序语句,每行有 3 个数字...原创 2022-04-27 21:35:57 · 349 阅读 · 0 评论 -
AcWing 244. 谜一样的牛(树状数组+二分查找)
题意:思路:我们用h[]存推理出所有牛的身高,a[i]表示当前第i头牛左边有多少牛比较低,c[]表示树状数组。我们发现,如果说 第i头牛的左边有a[i]头牛比它矮,那么**它的身高h[i]**要满足两个条件:①在数值1~n中排行第a[i] + 1小。②没有在h[i+1],h[i+2],…,h[n]中 出现过。(由于我们是倒序遍历,h[i+1]~h[n]这些第i头牛右边所有牛的身高已确定,当然不能选了)大体流程:我们倒序遍历每个数a[i]:①每次从剩余的数中找到第k..原创 2022-02-14 11:21:00 · 558 阅读 · 0 评论 -
AcWing 243. 一个简单的整数问题2(树状数组区间修改 区间查询)
题意:本题要求运用树状数组实现 区间修改 和 区间查询思路:在 上一题 中,我们用树状数组维护了一个原数组a的差分数组b,对于每一条指令“C l r d”,把b[i]加上d, 再把b[r+1]减去d。已经讨论得知的是:b的1~x前缀和b[1~x]就是经过这些指令后,a[x]增加的值。那么a序列的前缀和a[1~x]整体增加的值就是上式可以经过推导进一步改写为:推导过程:因此在这道题中我们可以考虑增加一个树状数组,用于维护i*b[i]的前缀和 ,上面的式子就可以直接进行计算了。具体地..原创 2022-02-13 17:41:59 · 503 阅读 · 0 评论 -
AcWing 242. 一个简单的整数问题(树状数组+差分 区间增加 单点查询)
前置知识:树状数组、差分。题意:思路:本题的指令有“区间增加”,“单点查询”。这两个指令是 裸的差分 所能够完成的,前者O(1),后者O(n),不过根据题目,元素个数n和询问次数m的数据范围均为1e5,如果用裸的差分,完成m次单点查询需要O(n^2),显然不合法,应当舍弃。正确做法:树状数组+差分,或者说用差分数组来建立树状数组。而树状数组基本指令为:“单点增加”,“区间查询”,当结合了差分数组就能够实现“区间增加”,“单点查询”了!(差分数组的单点增加,对应原数组区间增加,差分数组查..原创 2022-02-13 13:12:46 · 258 阅读 · 0 评论 -
树状数组介绍(蓝书详细讲解)+ AcWing 241. 楼兰图腾(树状数组模板题 区间查询 单点修改 逆序对思想 )
树状数组介绍以及如何用于求逆序对(蓝书讲解):经典例题:AcWing 241. 楼兰图腾空白代码:#include<bits/stdc++.h>using namespace std;#define int long longconst int N = 2e5+10;int a[N], c[N], up[N], down[N];int n;inline int lowbit(int x) {return x & (-x);}int ask(int原创 2022-02-13 00:24:36 · 599 阅读 · 2 评论