树状数组
穷源溯流
路很长,尽管走便是。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
洛谷 P2345 [USACO04OPEN]MooFest G(树状数组)
const int N=2e4+5; int n,m,_; int i,j,k; //int a[N]; struct Node { int pos; int val; bool operator<(Node o){ return val<o.val; } void read(){ sdd(val,pos); } }a[N];...原创 2021-05-11 19:00:47 · 628 阅读 · 0 评论 -
洛谷 P5149 会议座位(树状数组+Trie)
题目是一道求逆序对的题目,但是我们先要将每一个名字转化为数字再进行计算求逆序对的个数用树状数组或归并即可题目有个坑点,名字包含大小写字母,所以字典树需要开大一点#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define ss(a) scanf("%s",a)#define sd(a) scanf("...原创 2021-02-04 23:32:19 · 463 阅读 · 0 评论 -
洛谷 P4113 [HEOI2012]采花(树状数组)
又是一道莫队的模板题看到熟悉的 2e6 的数据量,应该也知道莫队跑步过去了,题目好不容易猜出了结论,但是却置疑他的准确这个题目和HH的项链这个题比较像同样此题也要采用树状数组来优化对于一个区间内出现的相同的颜色,我们只计算倒数第二个所做的贡献,算法的准确性:对于一个区间 [b.......a......a...c...a...d..A...e..a...f] (应该是不分大小写的)其中只有 A 对于答案有贡献,对于询问 [b,e] 或者 [c,e] 答案都只有 A...原创 2021-01-24 15:08:01 · 373 阅读 · 0 评论 -
洛谷 P1972 [SDOI2009]HH的项链(离线树状数组)
其实题目就是一道莫队模板题,套模板即可话说明明是莫队的模板题为什么要用树状数组解啊数据范围过大 ,用莫队的话 O(n^1.5) 达到 1e9 的复杂度,所以需要改进,只能将优化为 logn不妨将区间[……a …… a……a……a……] 中最后一个 a 作为答案的贡献,这样讨论区间内的种类数就可以保证正确性每次出现 a 的时候都要更新 a 的位置,利用桶排思想在对应位置更新最后统计位置的区间和即可const int N=1e6+5; int i,j,k;...原创 2020-12-13 22:29:16 · 369 阅读 · 0 评论 -
洛谷 P3353 在你窗外闪耀的星星(树状数组)
利用数组在 x 处做个映射,为 x 点处的亮度之和,这样利用树状数组在区间查询的时候要注意一下端点的情况从位置 1 开始,一直到 1e5,寻找最大的区间和,复杂度为 O(1e5logn),不开 o2 过不去,但是修改一下循环条件即可const int N=1e5+5; int i,j,k; int n,m; int a[N]; int c[N];void add(int x,int w){ for(;x<=n;x+=lowbit...原创 2020-11-29 11:29:51 · 585 阅读 · 0 评论 -
洛谷 P2184 贪婪大陆(树状数组+差分)
题意不太明确,炸弹并不会覆盖区间根据差分的思维,在 [l,r] 区间内添加一枚炸弹,diff[l]++,diff[r+1]-- 查询区间内有多少颗炸弹时,需要遍历区间 [l,r] ,如果利用树状数组维护的话,复杂度会小很多const int N=1e5+5; int i,j,k; int n,m; int a[N]; int c[N][2];void add(int x,int k){ for(;x<=n;x+=lowbit...原创 2020-11-29 10:48:45 · 471 阅读 · 0 评论 -
洛谷 P2357 守墓人(树状数组)
树状数组区间更新,区间查询的入门好题const int N=2e5+5; int i,j,k; int n,m,t; ll a[N]; ll c[N][2]; ll sum[N]; void add(int x,int y,int k){ for(;x<=n;x+=lowbit(x)) c[x][k]+=y;}ll ask(int x,int k){ ll ans=0; for(;x;x-...原创 2020-11-28 10:53:29 · 606 阅读 · 0 评论 -
1537:校门外的树
const int N=2e5+5; int n,m,t; int i,j,k; int L[N]; int R[N];void update(int pos,int val,int *c){ for(int i=pos;i<=N;i+=lowbit(i)){ c[i]+=val; }}int sum(int pos,int *c){ int ans=0; for(int i=pos;i;i-=lo...原创 2020-09-17 14:39:49 · 567 阅读 · 0 评论 -
1539:简单题
const int N=2e5+5; int n,m,t; int i,j,k; int L[N]; int R[N];void update(int pos,int val,int *c){ for(int i=pos;i<=N;i+=lowbit(i)){ c[i]+=val; }}int sum(int pos,int *c){ int ans=0; for(int i=pos;i;i-=lo...原创 2020-09-17 14:32:12 · 522 阅读 · 0 评论 -
1538:清点人数
const int N=2e5+5; int n,m,t; int i,j,k; int c[N];void update(int pos,int val){ for(int i=pos;i<=N;i+=lowbit(i)){ c[i]+=val; }}int sum(int pos){ int ans=0; for(int i=pos;i;i-=lowbit(i)){ ans+=c[i];...原创 2020-09-17 14:08:42 · 750 阅读 · 0 评论 -
1536:数星星 Stars
const int N=2e5+5; int n,m,t; int i,j,k; int c[N]; Pair p[N]; int ans[N];void update(int pos,int val){ for(int i=pos;i<=N;i+=lowbit(i)){ c[i]+=val; }}int sum(int pos){ int ans=0; for(int i=pos;i...原创 2020-09-17 13:59:56 · 1106 阅读 · 0 评论 -
D. Nested Segments(树状数组+离散化)
给出 n 个区间,求每个区间包含多少个区间对于所有区间,我们先按 l 的值降序排列这样对于 l[i] 来说,下一个 l[i+1] <=l[i],这样对于第 i+1 个区间有可能包含第 i 个区间的条件是 r[i+1]>=r[i]同时也为我们提供了当 l[i+1]=l[i] 时的排序方法按上述排完序之后,遍历区间,利用桶排标记 r[i] 在数轴上的点每次求出数轴上 1~r[i]之间有几个点被标记即可但是注意到题目中的 r 的值过大所以需要对 r 进行离散...原创 2020-08-01 15:55:33 · 498 阅读 · 0 评论 -
C. Fountains(最大值树状数组)
有 n 个泉水,c 枚金币,d 枚钻石,每个泉水可以带来 b 点欢乐值,但要消耗 p 枚金币或钻石,只能买两座泉水,问最大的快乐值这个题明显贪心啊如果两种泉水各买一座还好,但是有可能一种泉水买两坐,剩下的一种不买,所以利用树状数组求区间最大值const int N=2e5+5; int n,m,t; int i,j,k; int c[N],d[N]; int get_max(int x,int *aim)//1~x 的最大值{ int...原创 2020-07-31 14:06:17 · 472 阅读 · 0 评论 -
P1198 [JSOI2008]最大数(树状数组反向建树)
const int N=2e5+5; int n,m,t; int i,j,k; ll c[N];ll query(int x){ ll ans=1<<31; while(x){ ans=max(ans,c[x]); x-=lowbit(x); } return ans;}void add(int x,ll val){ val%=m; while(x<=n)...原创 2020-07-30 23:08:04 · 406 阅读 · 0 评论 -
P5367 【模板】康托展开(树状数组)
关于康托展开,假设有一个长度为 n 的序列{a1,a2,a3,……an},比它字典序小的排列有种,其中 表示在序列中 ai 后面有几个比 ai 小的数例如:之后要解决的就是快速求利用树状数组快速求出前缀和的特点,还是序列{2,4,1,5,3}首先树状数组置为 1,相当于未访问过,当元素被访问时,置为 0当 2 被访问时,求前缀和为 1(不包括自己),随后 2 被置为 0当 4 被访问时,求前缀和为 2(不包括自己和 2 ),随后 4 被置为 0思路来自:洛谷...原创 2020-07-28 10:17:45 · 604 阅读 · 0 评论 -
P4392 [BOI2007]Sound 静音问题(树状数组+区间最值)
const int N=1e6+5; int n,m,t; int i,j,k; //Pair c[N]; //fr->max,sc->min int a[N]; vector<int> ans; struct Tree { int fr=-inf; int sc=inf; }c[N];int lowbit(int x){ return x&(-x); }void...原创 2020-07-27 22:25:19 · 412 阅读 · 0 评论 -
1535:数列操作
const int N=1e5+5; int n,m,t; int i,j,k; int c[N];void update(int pos,int val){ while(pos<=n){ c[pos]+=val; pos+=lowbit(pos); }}int get_sum(int x)//第 1 个数到第 x 个数{ int ans=0; while(x){ ans+=...原创 2020-07-26 21:55:19 · 582 阅读 · 0 评论
分享