树状数组
树状数组相关内容
Alan_Lowe
世上没有白走的路,每一步都算数!——狂神
展开
-
一个简单的整数问题【拆分+树状数组】
一个简单的整数问题【拆分+树状数组】ACwing242#include<bits/stdc++.h>using namespace std;#define int long longconst int N = 2e5;int tree[N + 5],a[N + 5]; //分别存储树状数组、拆分前的序列int n,q,x,y,z;char ch;void update(int x,int y){ //更新树状数组 for(;x <= n;x += x原创 2022-03-09 10:05:57 · 122 阅读 · 0 评论 -
区间最大公约数【线段树+树状数组】
区间最大公约数【线段树+树状数组】CH4302、ACwing246题目:给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一:C l r d,表示把 A[l],A[l+1],…,A[r] 都加上 d。Q l r,表示询问 A[l],A[l+1],…,A[r]的最大公约数(GCD)。对于每个询问,输出一个整数表示答案。输入:第一行两个整数 N,M。第二行 N 个整数 A[i]。接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。输出:对于每个询问,原创 2022-03-08 12:21:19 · 224 阅读 · 0 评论 -
谜一样的牛【树状数组+二分】
谜一样的牛【树状数组+二分】POJ2182、ACwing244思路:我们可以用树状数组维护一个bool数组,在1~n如果某个位置是1说明现在这个高度的牛还未出现,而如果是0,说明已经出现了。例如 1 1 1 1从第n头牛开始倒序遍历:如果第4头牛前面有1头牛比它低,那么它的身高应该是2(bool数组的第二个1出现的位置)此时:1 0 1 1第n-1头牛前面有1有牛比它低,那么它的身高应该是3(bool数组的第二个1出现的位置)那么我们可以使用一个树状数组来维护,以logn的时间对前缀和进原创 2022-03-05 23:22:00 · 154 阅读 · 0 评论 -
一个简单的整数问题2【差分+树状数组+树状数组】
一个简单的整数问题2【差分+树状数组+树状数组】POJ3468、ACwing243思路:这个题和“一个简单的整数问题1”这个题相比的区别就是查询的是一个区间,而不再是一个数了。那么对于区间查询,还是使用一个树状数组来维护前缀和,也就是树状数组求前缀和的前缀和了。可以做出这样的换算来简化操作:首先是将输入的数组a[]进行差分得到d[],即:a[1] = d[1]a[2] = d[1] + d[2]a[3] = d[1] + d[2] + d[3]a[n] = d[1] + d[2] + .原创 2022-03-05 21:46:27 · 128 阅读 · 0 评论 -
楼兰图腾【树状数组】
楼兰图腾【树状数组】CH4201、ACwing241#include<bits/stdc++.h>using namespace std;#define int long longconst int N = 2e5;int a[N + 5],tree[N + 5]; //原始序列、树状数组int n,ans1,ans2; //n、尖刀、铁锹int top[N + 5],but[N + 5]; //分别表示第i个点前面比它大的原创 2022-03-04 23:15:44 · 96 阅读 · 0 评论 -
Contest【树状数组+逆序对】
Contest【树状数组+逆序对】牛客NC13947题目描述n支队伍一共参加了三场比赛。一支队伍x认为自己比另一支队伍y强当且仅当x在至少一场比赛中比y的排名高。求有多少组(x,y),使得x自己觉得比y强,y自己也觉得比x强。(x, y), (y, x)算一组。输入描述第一行一个整数n,表示队伍数; 接下来n行,每行三个整数a[i], b[i], c[i],分别表示i在第一场、第二场和第三场比赛中的名次;n 最大不超过200000输出描述输出一个整数表示满足条件的(x,y)数;64bit原创 2022-03-04 21:52:37 · 159 阅读 · 0 评论 -
树状数组2【拆分+求前缀和】
树状数组2【拆分+求前缀和】洛谷P3368#include<bits/stdc++.h>using namespace std;#define int long longconst int N = 500000;int n,m,d,x,y,z;int a[N + 5],tree[N + 5]; //分别用来存储原始序列和树状数组void update(int x,int y){ //更新树状数组 for(;x <= n;原创 2022-03-04 10:54:00 · 215 阅读 · 0 评论 -
树状数组1【模板+求前缀和】
树状数组1【模板】洛谷P3374#include<bits/stdc++.h>using namespace std;#define int long longconst int N = 500000;int n,m,d,x,y;int a[N + 5],c[N + 5]; //分别用来存储原始序列和树状数组void update(int x,int y){ //更新数组c for(;x <= n;x += x & -x)原创 2022-03-04 09:59:20 · 112 阅读 · 0 评论