树状数组和线段树
深街酒徒*
专业气氛组成员
展开
-
1215. 小朋友排队 Java题解 (树状数组,线段树)【第五届蓝桥杯省赛C++B/C组】
在交换时,必须保证只交换逆序对,因为如果交换了“正序对”,只会白交换,之后还得换回来。所以最优解的条件为:在当前小朋友前面的高个和在当前小朋友后面的矮个都恰好交换。所以只要统计每个数的前面有多少大于这个数的和这个数之后有多少小于这个数的和就是每个小朋友应该交换的最小次数。原创 2022-03-30 18:32:22 · 1206 阅读 · 0 评论 -
1270. 数列区间最大值 Java题解 (线段树)
题意为找出任意两区间中的最大值,由于询问的次数是百万级的,可以用线段树存储数列的数据:在树的每个结点中维护区间的左右端点和当前区间的最大值,查找时,通过递归实现 logn 的复杂度。总的时间复杂度为 O(mlogn)。原创 2022-03-29 17:44:58 · 1131 阅读 · 0 评论 -
1264. 动态求连续区间和 Java题解(线段树)
线段树:对动态数组修改元素后,快速求区间的和。时间复杂度为:O(logn)操作:①单点修改,递归+回溯实现。②区间查询。存储方式:将树的结点存入一维数组中,事实上就是一颗二叉树。原创 2022-03-29 16:02:49 · 753 阅读 · 0 评论 -
1265. 数星星 Java题解 (树状数组)
题中的输入按y递增的顺序,所以输入的点纵坐标依次增大,只需要考虑横坐标的位置,设a[i]:表示横坐标为i的星星有多少个,则当某坐标(xi,yi)时,只需要统计从a[0] + a[1] + a[2] +……a[i]的值。即前缀和,因为随着y坐标的增加,不断会有值加到a[i]中,所以实际上是求的动态数组的前缀和,所以用树状数组。原创 2022-03-28 22:41:53 · 595 阅读 · 0 评论 -
1264. 动态求连续区间和 Java题解 (树状数组)
操作:①求前n项和。②添加元素至数组。(对所有父节点元素均需要修改)设当前结点索引为x,则其父节点索引为 x+lowbit(x)。原创 2022-03-28 22:22:55 · 272 阅读 · 0 评论