树状数组
文章平均质量分 52
Lazines_by
好吧,我要工作了
展开
-
Fruit Ninja(树状数组)hdu4000
Fruit Ninja 题意:在一个数组a[]中找出符合i 思路: 可以从反面进行求出:a[i] 废话不多说,直接上代码: #include using namespace std; typedef long long ll; const int maxn = 100000 + 10; #define mod 100000007 ll a[maxn]; ll tree[maxn原创 2016-11-20 21:06:16 · 359 阅读 · 0 评论 -
Codeforces846D(二分+树状数组)
题意:每次对矩阵进行更新,有一个时刻。然后问什么时候使得矩阵中有k * k的矩阵被更新了。 思路:二分时间,然后判断每一个时间是否复合,注意这里的时间不一定是连续的,所以需要离散化。每次判断的时候需要对进行重新操作,判断是否符合,用到了二维树状数组。 #include #include #include #include #include #include using namespa原创 2017-09-14 10:53:53 · 359 阅读 · 0 评论 -
hdu 5877(树状数组+离散化)
题意:查找节点与它的父亲节点相乘小于k的种类数。 思路:用一个树状数组维护,查询的话就是它的父亲节点小于m/a[i]的个数。当跑完这个分支之后,要对他进行清除操作。 PS:数比较大,需要离散化。 #include #include #include #include #include #include #include #include #include using namespac原创 2017-08-11 20:56:55 · 327 阅读 · 0 评论 -
hdu 1394
题意:给出一个数组是0 ~n-1的排列,然后将第一个数一个一个地加入到数组的最后,使得形成的数组的逆序对最少,输出最少的逆序对; 思路:因为是0~n-1的排列,防止树状数组在0处无法自增,a[i] ++ ,形成1~n的排列。所以第一个数的形成的逆序对的数量是比它小的数的个数即a[1] - 1;比他的的数目为n - a[1],即为到了最后一位所形成的逆序对。所以每把一个数加入到最后,产生的原创 2017-05-10 09:29:16 · 182 阅读 · 0 评论 -
51Nod 1019树状数组离散化
开始RE,后面终于想通,数是10^9,然后离散化一下就行了; #include #include #include #include #include #include #include using namespace std; const int maxn = 100000 + 10; #define INF 0x3f3f3f3f #define clr(x,y) memset(x,y原创 2017-05-23 13:44:19 · 318 阅读 · 0 评论 -
POJStars2352(树状数组学习)
POJStars2352(树状数组) 这个题意这的是太令人难懂哈,为了学习树状数组只有硬着头皮搞了,树状数组是一个tree数组记录了和的所有数组,不过不是从起点开始的,要求从起点开始的还得调用一个get()函数,见图: 这个图上的这个横条就是各个tree的值,get函数的原理就是黑线画的这样了。 之后再更新: 用add 这个图是包括这个节点的所有tree数组,所以这个都要加一个这个原创 2016-07-29 16:04:28 · 511 阅读 · 0 评论 -
HDu1166敌兵布阵(树状数组)
HDu1166敌兵布阵(树状数组)这个题是用的树状数组做的,线段树也可以做,待会尝试一番。 某段区间的和的话,就用get(y)-get(x-1)来求得。我的:#include<iostream> #include<string> #include<cstdio> #include<cmath> #include<map> #include<algorithm> #include<cstring>原创 2016-07-29 16:44:12 · 286 阅读 · 0 评论 -
UVALive 4329Ping pong(树状数组)
UVALive 4329Ping pong题意: 一条大街上住着 n 个乒乓球爱好者,经常组织比赛切磋技术。每个人都有一个不同的技能值 ai。每场比赛需要 3 个人:两名选手,一名裁判。他们有一个奇怪的规定,即裁判必须住在两名选手的中间,并且技能值也在两名选手之间。问一共能组织多少种比赛。我的: 因为n是10^5,所以以中间的值作为裁判,再遍历两端找到比该点大,小的个数,相乘之后相加的话原创 2016-07-29 20:03:05 · 370 阅读 · 0 评论 -
HDU5775Bubble Sort(树状数组)
HDU5775Bubble Sort我的: 要求:找到各个数的活动的最左端和最右端的位置的绝对值。 这个题是根据冒泡排序: ,冒泡排序每次找到一个第i最小值,放到i这个位置,然而排序的话是只有两个相邻的两个数,所以后面有多少个比该数小的数,这个数就会进行多少次和后面的交换,因为冒泡排序就是相邻的两个数才能进行交换,所以经过交换后,该数就向后移动了比他小的数的数目。 所以该数移动的最右端就是原创 2016-07-29 21:09:11 · 498 阅读 · 0 评论 -
HDU 3874 离线处理,树状数组
题意:查询区间不相同数的集合。 思路:对于每一个查询区间,按照右端点排序,这样我们每次查询的时候,如果这个数在之前出现过,那么的话将前面的删除,重新在新的位置加入。这样每一种数只会被统计一次,查询直接用树状数组进行就行了,相当于前缀和。 #include #include #include #include #include #include #include using namesp原创 2017-08-30 20:06:23 · 219 阅读 · 0 评论