
0、ACM_线段树+树状数组
程序员的冷浪漫
爱好coding对世界充满好奇心
展开
-
离散化+树状数组 求逆序数POJ2299
离散化是一种常用的技巧,有时数据范围太大,可以用来放缩到我们能处理的范围 因为其中需排序的数的范围0---999 999 999;显然数组不肯能这么大;而N的最大范围是500 000;故给出的数一定可以与1.。。。N建立一个一一映射;这里用一个结构体struct Node { int v,order; }p[510000];和一个数组a[510000];其中v就是原创 2013-08-27 23:38:36 · 1107 阅读 · 0 评论 -
树状数组入门
树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是O(logn)。 在解题过程中,我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。 但是不难发现,如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。 可以说,每次修改A[i]后,调整前缀和S[]在最坏原创 2013-08-28 22:55:44 · 673 阅读 · 0 评论 -
线段树入门
题意: 给定Q(1 ≤ Q≤ 200,000)个数A1,A2… AQ,,多次求任一区间[Ai,Aj]中最大数和最小数的差。*下面先介绍一种优秀的数据结构!线段树(Interval Tree), 查找和更新操作都是nlog2(n);树:是一棵树,而且是一棵二叉树。 线段:树上的每个节点对应于一个线段(还是叫“区间”更容易理解,区间的起点和终点原创 2013-06-24 13:49:50 · 989 阅读 · 0 评论 -
(线段树)湖南省第八届ACM省赛 RMQ with Shifts
RMQ with Shifts原创 2014-08-11 15:59:13 · 1053 阅读 · 0 评论 -
hdu 5493(线段树)
题意:有n个人,每个人的身高和左边(或右边)比自己高的人的个数height[i],输出符合给出的条件且字典序最小的从左到右队列里每个人的身高。思路:先将每个人的身高按照从矮到高排序,当第i个人入座的时候,后面还有(n-i)个人比他高,第i个人要求左边或右边比他高的人数为k, 如果n-i身高字典序最小,我们可以在左边留k个空位或者右边,(具体留左边还是右边,看第i个人坐下去时,哪个字原创 2015-11-08 23:33:32 · 814 阅读 · 0 评论