
树状数组
z岁月无声
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #782 (Div. 2)-D. Reverse Sort Sum
思路:树状数组原创 2022-07-30 03:15:05 · 319 阅读 · 1 评论 -
LeetCode-327. 区间和的个数
同时是对于前缀和数组进行分析,对于pre[i],当j>i,pre[j]位于区间[pre[i]+lower,pre[i]+upper]之间是合法的,因此可以从左到右遍历pre,对于pre[i],查询线段树中下标pre[i]的个数,然后将区间[pre[i]+lower,pre[i]+upper]加1,需要注意将pre[i],pre[i]+lower,pre[i]+upper哈希离散化。思路归并排序/树状数组(线段树)2.树状数组(线段树)code2.数组数组。...原创 2022-07-25 23:45:50 · 279 阅读 · 0 评论 -
Codeforces Round #783 (Div. 2)-D. Optimal Partition
传送门:https://codeforces.com/contest/1668/problem/D思路:dp+树状数组, 参考博客https://www.cnblogs.com/Prgl/p/16169339.html需要注意dp初始化时需要把0先算上去,即假设数列的左边隐含着一个为0的元素做分割线Code:#include<iostream>#include<algorithm>#include<set>#include<unordered_map.原创 2022-05-18 02:13:10 · 165 阅读 · 0 评论 -
2018"百度之星"程序设计大赛 - 资格赛-1005 序列计数
思路:dp[i][k]表示:以a[i]为右端点时长度为k的上升子序列的个数,转换公式比较容易写出来dp[i][k]=sum{dp[j][k-1]} (a[j]<a[i],j<i)可以看出有 i,j,k三重循环,时间复杂度为 O(n^3) 会TLE,因此看能不能减小一重循环又转换方程看出,dp[i][k]为前i-1个a[j]<a[i]的总和,有a[j]<a[i...原创 2018-08-17 15:06:13 · 359 阅读 · 0 评论 -
牛客-牛客小白月赛6-F 发电
链接:https://www.nowcoder.com/acm/contest/136/F来源:牛客网题目描述 HA实验是一个生产、提炼“神力水晶”的秘密军事基地,神力水晶可以让机器的工作效率成倍提升。 HA实验基地有n台发电机,标号为1-n,每台发电机的发电效率为1。 为了满足基地的用电需求,HtBest会在某台发电机上镶嵌一个等级为i的神力水晶,该发电机的发电效...原创 2018-08-20 22:26:30 · 248 阅读 · 0 评论 -
牛客小白月赛9-E 换个角度思考
地址:https://ac.nowcoder.com/acm/contest/275/E思路:主席树 || 树状数组主席树Code:#include<iostream>#include<algorithm>#include<cstdio>using namespace std;const int MAX_N=100005;str...原创 2018-11-21 17:54:20 · 220 阅读 · 0 评论 -
桂林电子科技大学第三届ACM程序设计竞赛-题解
这两天几个比赛都在一起,谁顶的住啊,打(签到)了6场,结果还有没有中奖,太真实了ヽ(`Д´)ノ︵ ┻━┻ ┻━┻A-串串https://ac.nowcoder.com/acm/contest/558/A思路:除了暴力,没思路。。。B-重复https://ac.nowcoder.com/acm/contest/558/B思路:签到,用map去重即可。。...原创 2019-04-14 22:24:05 · 620 阅读 · 0 评论 -
Educational Codeforces Round 65 (Rated for Div. 2)-F. Scalar Queries
地址:https://codeforces.com/contest/1167/problem/F思路:这种题让我想破脑袋也想不出来啊QAQ 参考大佬的博客orzhttps://www.cnblogs.com/xyq0220/p/10876031.htmlhttps://www.cnblogs.com/carcar/p/10877964.html说说我的理解。对于每个a[i]...原创 2019-05-19 22:15:54 · 267 阅读 · 0 评论 -
Codeforces Round #567 (Div. 2)-D. Irrigation
地址:https://codeforces.com/contest/1181/problem/D思路:思维+树状数组+二分查找先将城市举办次数以及Q个查询的次数由小到大排序。对于城市举办次数每次从低层次到高层次依次增高,依次只要遍历城市,每次将同一高度的上升的下一高度即可,记录此时的总举办次数Max,同时判断查询是否在Max之内,在则判断是在第几个城市ans,而城市举办次数相同时要按照...原创 2019-06-19 14:47:02 · 311 阅读 · 0 评论 -
HDU-2852-KiKi's K-Number
思路:e的范围比较小,因此可以用树状数组来记录前e的个数,在利用二分查找来求出比a大的第k个数。Code :#include<iostream>#include<cstring>using namespace std;const int MAX_S=100005;int Q;int d[MAX_S];int C[MAX_S];int Lowb...原创 2018-08-17 10:23:53 · 247 阅读 · 0 评论 -
HDU-2642-Stars
思路:纯粹的二维树状数组模板题。。Code : #include<iostream>#include<cstring>#include<cmath>using namespace std;const int MAX_N=1005;const int MAX_M=1005;int Q;int C[MAX_N][MAX_M];boo...原创 2018-08-14 02:00:00 · 147 阅读 · 0 评论 -
HDU-1166-敌兵布阵(树状数组|线段树-模板题)
思路:树状数组或线段树 模板题。。。Code ://树状数组 #include<iostream>using namespace std;const int MAX_N=50005;int n,T;int a[MAX_N],c[MAX_N];int Lowbit(int x);void Update(int id,int x);int Sum(int ...原创 2018-08-12 12:15:25 · 230 阅读 · 0 评论 -
HDU-3450-Counting Sequences
思路:设dp[i]:表示第i个元素a[i]对前i-1个的完美子,容易写出转换方程:dp[i]=sum{dp[j]+1} (|a[i]-a[j]|)<=m(m为题中最大差值d))这样的时间复杂度为 O(n^2),会TLE.对于sum{dp[j]+1}我们能够先用d[n]记录a[n],再将d[]由小到大排序,这样的话就可用二分查找找出|a[i]-a[j]|)<=m的j的最左端 l ...原创 2018-08-15 10:08:11 · 242 阅读 · 0 评论 -
HDU-1541-Stars
思路:开始我以为这是一道二维树状数组,结果发现x,y过大会超空间,然后我发现n比较小,于是我就以为把x,y的范围缩小到n就可以了,结果还是超空间,然后看了下别人的博客才发现只要一维就可以了,我真的是脑子秀逗了,就知道套模板。。。由输入可知,x y 是按照 y递增,y相等在x递增输入的,输入的点一定在当前点的下方,因此可以不用考虑y,只需要对前x求和即可,还有注意++x防止x=0;Cod...原创 2018-08-15 12:09:39 · 262 阅读 · 0 评论 -
HDU-1892-See you~
思路:本来以为是个纯模板题,结果发现初始化时利用Update(i,j,1)的话会超时,应该是C[i][j]=Lowbit(i)*Lowbit(j);还有就是求区间和时要将对角线的两个点转换为主对角线的两点。Code :#include<iostream>#include<cstring>#include<cmath>using namespa...原创 2018-08-15 18:16:05 · 340 阅读 · 0 评论 -
HDU-1556-Color the ball
思路:扫描线||树状数组一,扫描线:题目意思为求每一点的线段覆盖数,因此可以将左端点用 1表示线段开始,右端点用-1表示线段结束,然而右端点也属于线段,因此可以将改为 右端点+1用 -1 表示,在将所有点由小到大排序再遍历一遍,sum记录其值,因此遍历到 i点时sum就为 i点的线段覆盖数。二,树状数组:原理和扫描线类似,将 左端点和 右端点+1 分别用1,-1表示,而第i点的覆盖数即...原创 2018-08-13 11:23:32 · 273 阅读 · 0 评论 -
51nod-1019 逆序数
1019 逆序数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4。给出一个整数序列,求该序列的逆序数。Input...原创 2018-03-19 10:58:32 · 324 阅读 · 0 评论 -
HDU-2838-Cow Sorting
思路:此题求逆序数的同时还要求逆序数的总和,对于s的逆序数个数可以用树状数组来求,再求s的逆序数的总和也可以用树状数组来解决Code :#include<iostream>#include<cstring>using namespace std;typedef long long LL;const int MAX_S=100005;int n;i...原创 2018-08-13 17:27:43 · 188 阅读 · 0 评论 -
HDU-2688-Rotate
思路:利用树状数组求出正序的个数,对于R[S E](数据是S<=E的。。)只要对[S E]区间中 F[S]的逆序数ans++,正序数ans--,然后对其翻转即可。Code :#include<iostream>#include<cstring>using namespace std;typedef long long LL;const int ...原创 2018-08-13 21:39:52 · 171 阅读 · 0 评论 -
HDU-3584-Cube
思路:对于改变A[x1,y1,z1]-A[x2,y2,z2]的值,使0变1,1变0,这个这样都加1,然后查询时 %2即可,关键是如何改变其值,可利用三维树状数组,但要改变的是整个区域的值该如何,例如一维树状数组C[n], 改变A[i]-A[j]的值可以先 Update(i,1),在Update(j+1,-1),这样Query(i->j)的值都加了1,而Query(j+1-->n)的...原创 2018-08-14 21:29:53 · 225 阅读 · 0 评论