树状数组
文章平均质量分 63
Brightess
湖南城市学院在读,大四学生
展开
-
Codeforces Round #791 (Div. 2) C - Rooks Defenders(树状数组)
题目来源 B Rooks Defenders 点此进入题面 题意: 给出一个棋盘,每次 有两种操作: ① 向某一格放入一个石头(在某一格放入石头,则 该行该列都会受到攻击) ② 询问某个矩阵中是否所有方格都受到了攻击。 思路: 行列分开讨论,使用 两个一维树状数组 分别维护 行(tI)、列(tII) 的 单点修改,区间查询 功能(行、列 是否有被攻击,也可直接用布尔数组) 用 Hash 表 分别记录 行(hahI[] 数组)、列(hahII[] 数组) 的石头数量, 对于 某一行 或 某一列原创 2022-05-18 21:52:21 · 205 阅读 · 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 long typedef long long ll; typedef vector<int> vi; typedef pair<int, int> pii; type原创 2022-05-12 16:12:20 · 1149 阅读 · 2 评论 -
2022牛客寒假1 Baby‘s first attempt on CPU(树状数组做法 + 贪心)
题目描述 一共有 n 个语句。若语句 i 向语句 j 调用(j < i),则这里两个语句之间必须 至少间隔三个语句(其中包括了 空语句 和 非空语句),否则会出现问题。 题目输出给定语句调用表。 你要插入最少数量的空白语句,来满足所有语句调用没有问题。 题目可能较难理解,我们根据样例进行进一步解释: 样例 输入: 4 //第一行包括一个整数 n ,表示 程序原有语句总数 0 0 0 1 0 0 0 1 0 0 0 0 // 上面 n 行,第 i 行描述了第 i 条程序语句,每行有 3 个数字...原创 2022-04-27 21:35:57 · 287 阅读 · 0 评论 -
树状数组介绍(蓝书详细讲解)+ AcWing 241. 楼兰图腾(树状数组模板题 区间查询 单点修改 逆序对思想 )
树状数组介绍以及如何用于求逆序对(蓝书讲解): 经典例题:AcWing 241. 楼兰图腾 空白代码: #include<bits/stdc++.h> using namespace std; #define int long long const 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 · 548 阅读 · 2 评论 -
AcWing 242. 一个简单的整数问题(树状数组+差分 区间增加 单点查询)
前置知识: 树状数组、差分。 题意: 思路: 本题的指令有“区间增加”,“单点查询”。 这两个指令是 裸的差分 所能够完成的,前者O(1),后者O(n),不过根据题目,元素个数n和询问次数m的数据范围均为1e5,如果用裸的差分,完成m次单点查询需要O(n^2),显然不合法,应当舍弃。 正确做法:树状数组+差分,或者说用差分数组来建立树状数组。 而树状数组基本指令为:“单点增加”,“区间查询”,当结合了差分数组就能够实现“区间增加”,“单点查询”了! (差分数组的单点增加,对应原数组区间增加,差分数组查..原创 2022-02-13 13:12:46 · 208 阅读 · 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 · 460 阅读 · 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 · 486 阅读 · 0 评论