
数据结构---树状数组
Soar-
这个作者很懒,什么都没留下…
展开
-
POJ 1990 MooFest(树状数组 标记计数应用)
题意: 有N头牛,每个有两个属性:距离和权值,任意两个都可以交流,两头牛交流的花费是其中权值较大的权值。问所有的牛可以两两交流,共需要花费多少权值。 题解: 按照V从小到大排序,当前处理的就是最大的。然后怎么去找在他之前的牛的d和在它之后的d呢?在它前面的d总和可以用树状数组标记法去求,在它之后的只需用当前处理的总距离减去前面的距离总和,就可以得到在它后...原创 2018-05-25 09:11:58 · 160 阅读 · 0 评论 -
HDU 3450 Counting Sequences(树状数组,离散化,中等题)
题意: 给定一数列,问最多存在多少完美子序列。完美子序列定义如下: 原序列一共有2的n次方个子序列,这些子序列满足这样的关系:子序列元素个数至少2个,且任意相邻的两个元素之差不超过d。 题解:每次新来一个元素x,都要去前面扫描有y个大于等于x-d且小于等于x+d的元素,然后以他们为结尾的完美序列数量的和+1(前面都不选),即为新来x结尾的完美序列。对于所有的x线性扫...原创 2018-05-25 08:40:19 · 183 阅读 · 0 评论 -
POJ 3378 Crazy Thairs(树状数组,DP, 高精度,离散化)
题意:有一个N个数组成的数列,问你该数列中有多少上升5元序列,即满足如下要求的序列(不要求连续取5个A): 1 ≤ i < j < k < l < m ≤ N Ai < Aj < Ak < Al < Am题解:数据大,量不大,所以要离散化。动态规划:令d[x][i] = y 表示原始数据中的以A[x]结尾的上升i(i为...原创 2018-05-25 08:39:43 · 298 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number(树状数组,逆序数)
题意: 有一个n个整数的排列,这n个整数就是0,1,2,3...n-1这n个数(但不一定按这个顺序给出)。现在先计算一下初始排列的逆序数,然后把第一个元素a1放到an后面去,形成新排列a2 a3 a4...an a1,然后再求这个排列的逆序数。继续执行类似操作(一共要执行n-1次)直到产生排列an a1 a2...an-1为止。计算上述所有排列的逆序数,输出最小逆序数。题解: ...原创 2018-05-24 18:33:26 · 164 阅读 · 0 评论 -
POJ 2182 Lost Cows(树状数组,暴力模拟)
题意: 一数列1-n,顺序为乱序,然后从第二个开始,给出每个元素前面有多少个比该元素小的。求原始数列。 题解: 手动模拟一下怎么还原数列:从后往前找,弄个标记数组,找就行了,直接暴力。然而碰到“前面有少个比他小”这样的字眼,树状数组很快的进行求解。在从后往前的过程中,vis数组存放的已经出现的可以由树状数组求,然后二分去求当前位置的即可。 #includ...原创 2018-05-25 08:40:52 · 286 阅读 · 0 评论 -
HDU 2838 Cow Sorting(树状数组应用)
题意: 不翻译了~ Sherlock's N (1 ≤ N ≤ 100,000) cows are lined up to be milked in the evening. Each cow has a unique "grumpiness" level in the range 1...100,000. Since grumpy cows are more likely ...原创 2018-05-25 08:40:37 · 162 阅读 · 0 评论 -
POJ 3067 Japan(树状数组,逆序数变形)
题意:水平方向有2n个城市点,他们分别按顺序分布在平行的两条直线上,编号都是从1到n。然后现在在上直线与下直线的两个城市点之间建公路,一共建k条公路。问你这k条公路一共有多少个交点(保证最多只有两条公路会交于同一点)?题解: 注意题目中两边的岛是这么分布的: 1 2 3 4 1 2 3 4且一个点最多只有两条边相交,不可能出...原创 2018-05-24 16:35:04 · 160 阅读 · 0 评论 -
POJ 2481 Cows(树状数组,查数)
题意: 有n头牛,每头牛对应一个区间[Si,Ei],如果牛j 的区间是牛i 的区间的真子集(即Si <= Sj and Ej <= Ei andEi - Si > Ej - Sj),那么就说牛i 比牛j 强壮。要你依次输出比第i头牛强壮的牛数目。 题解:将所有的牛的E区间按从大到小排序,如果E相同则S小的排在前面。读取到第i个牛的Si和Ei,那么之前出现的牛Sj<=Si 的...原创 2018-05-24 16:15:19 · 155 阅读 · 0 评论 -
POJ 2352 Stars(树状数组,查数)
题意:二维平面给定n个点(任意两个点不重合)的坐标,然后要你输出每个点的“等级“。每个点的等级是它的左下放的点个数(包括正下放和正左方的点)。最后输出每个等级的点的个数。题解:任意两个点不会重叠,且给出点的顺序是:按Y坐标上升的顺序来给出,如果Y相同 就按X上升的顺序给出。给出的顺序是完美的,只需要找左边有多少个比当前X小的就可以了。树状数组查数基本应用!#include<cstdio&g...原创 2018-05-24 15:52:00 · 126 阅读 · 0 评论 -
POJ2299 Ultra-QuickSort(树状数组求逆序数+离散化)
题意:给一个n个整数组成的序列,每次只能交换相邻的两个元素,问你最少要进行多少次交换才能使得整个整数序列上升有序。题解: 冒泡排序的交换次数等于数组中所有数的逆序数之和。逆序数可以用树状数组求出。具体操作:构建范围为1-n的树状数组,每次出现一次,该位置就加1,所以对于每个j,树状数组得到的前n项和就是满足i<j,ai<=aj的i的个数。从而可以用总的可以减去上面的个数,便可...原创 2018-05-24 15:34:41 · 322 阅读 · 0 评论 -
HDU 1166 敌兵布阵(树状数组入门题)
题意:单点add,区间sum。 题解: 线段树可以很好的写这个题,但是树状数组显得更加有效,快捷!#include<bits/stdc++.h>using namespace std;const int maxn = 50000+10;int c[maxn];int lowbit(int x){ return x & -x;}int sum...原创 2018-05-24 14:24:55 · 143 阅读 · 0 评论 -
D-query SPOJ - DQUERY (主席树 or 树状数组,hash)
题意:给定一数组,查找区间上不同的数种类有多少。题解:好多把这道题看做模板题,但和曾经写过的一道树状数组题很像。这里提供两种解法:主席树解法是记录重复的次数,然后最后总的去减。#include<bits/stdc++.h>using namespace std;const int maxn = 30000+100;const int maxm = 200000+100;co...原创 2018-05-29 20:00:13 · 200 阅读 · 0 评论 -
HDU 3874 Necklace(树状数组+离线hash)
题意: 一个由n个整数组成的数列,求区间[L,R]上的和,其中相同的元素只能算一次。 题解: 对于原数组,hash记录每个元素出现的位置。然后把所有元素只添加一次进树状数组。离线初始数组和要查询的所有区间。把所有的区间按照L从小到大排序。对于第一个区间,假设L=1,那么直接就sum(R)就是第一个区间的答案了,对于以后的区间如果L还是为1的话,继续sum...原创 2018-05-25 10:30:20 · 160 阅读 · 0 评论 -
HDU 1556 Color the ball(树状数组,区间更新+,单点查询)
题意: 问题等价于:一个大小为N的数组,初始全为0,然后每次区间+1,求最后单点的值。题解: 线段树可以很好的解决这种区间更新的问题,但是这里用实现较简单的树状数组实现。举个栗子:[3,5]区间+1,执行add(3,1),这时候sum(1) =0, sum(2) =0, sum(3) =1, sum(4) =1, sum(5) ...原创 2018-05-25 09:23:53 · 175 阅读 · 0 评论 -
Matrix POJ - 2155 (二维树状数组)
题意: 给定一个初始化全为0的01矩阵.有两种操作:C: x1,y1,x2,y2 翻转矩形内的01Q x,y 查询坐标为x,y是啥分析: 以前写过一维的用树状数组区间更新的题. 这道题是个二维的.思想一样. #include<algorithm>#include <iostream>#include <cstri...原创 2018-09-12 12:44:26 · 208 阅读 · 0 评论