
BIT树状数组
文章平均质量分 53
keyboarder_zsq
你所认为的极限,其实是别人的起点。
展开
-
hdoj5792 【树状数组】【未完待续】
题意: 求有多少种四个数满足Aa < Ab,Ac > Ad,1 < =a < b < = n ,1 < = c < d < = n ;思路:只要找到两种情况就成立了。 在序列中对于一个元素在他的后面存在比他大的, 还有就是存在对于一个元素在他的后面比他小的, 那么对于一个元素的①种情况总和*②种情况总和; 但是这样不难发现是有重复的。 大哥说有四种可能。。前面比他小的 * 后面比他小的原创 2016-08-02 21:51:02 · 551 阅读 · 0 评论 -
CodeForces540E【树状数组+二分】
思路: 1:变换的做一次树状数组求逆序就好了 2:然后就是对于变换的求前面有多少个比他大,后面有多少个比他小 具体: 对于当前位置,前面有多少比他大,然后减去被占多少位置(二分就好) 对于后面位置,后面有多少比他小,然后减去被占多少位置(二分就好) 然后就是模拟了。。然后就过了~#include <bits/stdc++.h>using namespace std;#define m原创 2017-09-15 14:13:49 · 678 阅读 · 0 评论 -
HDU6170【DP+树状数组+差分维护】
哦,这题我1A诶,好开心啊,写个题解嘛先预处理一下第二个串,预处理出每个位置字母相同的最远位置。然后大力DP! 分成s串(1串),p串(2串),dp[i][j]代表从p串位置1-i能否匹配s串1-j,然后需要维护就是对于”*”,因为p串的第 i 个字符作用还可以匹配位置 j 后面的元素,不能再枚举一层,考虑前缀和,然后用树状数组差分即可~具体细节见代码注释~Thanks for watching!原创 2017-08-22 18:28:33 · 629 阅读 · 0 评论 -
CodeForces830B【树状数组+线段树】
思路: 就是 你好像就是要维护一下,你pop的当前值与之前的pop值的位置之间有多少个要移一移,然后算一下,然后就变成了模拟。。 线段树维护 值 和 位置,树状数组维护已经取了没有。 7 6 3 1 5 4 4 3代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;const int INF = 0原创 2017-07-28 15:22:18 · 490 阅读 · 0 评论 -
树状数组萌新讲解+基础习题【一点一滴】
树状数组基础篇树状数组讲点中文名:树状数组 英文名:Binary Indexeds Tree 英译中:二进制索引树 这特么多清楚引入: 给你n个数 1. 求区间的的和 2. 改变某个值然后朴素做法肯定GG,这里就有了树状数组的神奇功效。这里我也不想多说什么朴素做法的缺点,如果在时间空间允许的朴素做法也行啊,树状数组就是这么牛逼,我能怎么说他是要怎么转化过来的,他就是可以用它独有的特性原创 2016-08-02 11:09:48 · 1845 阅读 · 0 评论 -
HDU4585【树状数组/STL】
题意: 有n+1个僧侣,然后1号已经在塔里了,能力值是1e9,现在依次给你两个数, 第一个代表标号,第二个代表能力值,每次挑一个在塔里的能力最接近的跟她打,如果能力相同的取小,然后把它扔进塔里 每次输出两个标号,一个旧的,一个新的。思路: 当时就感觉很水,所以做着做着就… 变成了,离散化能力值,然后利用树状数组维护,然后二分查找值的最近点…【确实麻烦了】 ++: 1. 前缀和寻找比 x原创 2017-07-05 09:52:10 · 469 阅读 · 0 评论 -
BZOJ3289【莫队算法+树状数组+离散化(附小模板)】
interesting~原创 2017-02-18 00:20:35 · 770 阅读 · 0 评论 -
CodeForces301D 【BIT】
转自:http://www.cnblogs.com/oyking/archive/2013/08/14/3256922.html 题意: 给你n个数,求区间有多少对除数和被除数的对数思路: 线段树 区间和/ 树状数组 前缀和 2e5的数的除数最多才81个 对于一个数的贡献,我最好是区间的贡献,也就是1-n的贡献。Sum[pos]: 1到POS的对数。 对于区间[L,R],如果简单考虑 S转载 2017-07-01 23:18:21 · 384 阅读 · 0 评论 -
POJ2155【二维树状数组模板】
sum(i,j)%2 = 0/1的具体证明;推荐一篇论文 浅谈信息学竞赛中的“0”和“1”.pdf(百度的到吧)//#include//using namespace std;//typedef long long LL;#include #include #include #include using namespace std;typedef long long原创 2017-04-05 23:54:49 · 425 阅读 · 0 评论 -
51nod1202【DP-树状数组维护】
思路:DP[i]代表从1 到 i 以 a[i] 为末尾的子序列个数,dp[i]=dp[i]+dp[j](a[i]!=a[j]) +1利用树状数组维护以值 a[i] 结尾的子序列个数。 #includeusing namespace std;typedef long long LL;const LL mod=1e9+7;const int N=1e5+10;LL c[N];原创 2017-03-10 00:13:31 · 393 阅读 · 0 评论 -
HDU2852【树状数组+二分】
NO!原创 2017-02-16 19:31:27 · 535 阅读 · 0 评论 -
lightoj 1085【离散化+树状数组】
题意:求所有的上升子序列种数;思路:我想先离散化一下,然后用树状数组维护一下。最终答案就是sum(n) ?卧槽,好像是;然后就过了。。#include using namespace std;typedef long long LL;const LL mod=1000000007;const int N=1e5+10;LL arr[N],n;LL c[N*4]原创 2016-11-20 00:54:44 · 452 阅读 · 0 评论 -
lightoj 1088【树状数组+离散化】
题意:给你n个数,然后给你q个区间,然后问你这n个数有多少个在这个区间上;思路:树状数组搞搞,但是注意到数的范围很大,所以先离散化一下。初始化初始化!!!卧槽,wa的我好郁闷。。。#include using namespace std;typedef long long LL;const int N=2e5+10;int arr[N];int c[N*4];in原创 2016-11-18 20:32:12 · 464 阅读 · 0 评论 -
hdoj5493【树状数组+二分】
题意: 给你n个人的高度, 再给出一个值代表该高度下有前面比他高的 或 后面比他高的人数, 求满足条件下的最小字典序, 不行的话输出”impossible” 思路: 对于最小字典序,对于每个位置的最小是=min(k,n-i-k); 先离线排序一下,然后对每个人操作,如果(n-i-k)<0,二分找一下这个位置,然后存一下就好了;#include <bits/stdc++.h>using原创 2016-09-21 22:29:06 · 400 阅读 · 0 评论 -
POJ 3067【树状数组】
题意: 给你两行数字,n个m个,然后给你k条线直接把两个数连起来,问有多少个交叉的 思路: 假定上一行是起点,下一行是终点。 把路按照起点从大到下排序, 然后可以直接对每条路查询,这条路目前的交叉数,等于sum[终点-1]条路相连, 因为是起点是从大到小,终点是取一个前面点的路,所以肯定相交; 具体处理就是利用树状数组存终点,每次取值,复杂度也低; 然后这个K有问题…//#inclu原创 2016-09-15 20:25:04 · 385 阅读 · 0 评论 -
lightoj 1085【离散化+树状数组】
题意: 计算一个序列里有多少个上升子序列 思路: 先离散化一下,按照值排序,如果相同的就按照坐标从大到小排序,这样就可以避免重复计算。 树状数组存的是以a[i]结尾的子序列之和; dp[a[i]]=sigma(a[i]-1)+1; OK,还是很简单的;#include <bits/stdc++.h>using namespace std;typedef long long LL;c原创 2016-09-15 20:23:11 · 93 阅读 · 0 评论 -
Codeforces645B【树状数组求逆序数】
题意: 给你1-n的序列,然后有k次机会的操作,每一次你可以选择两个数交换。 求一个最大的逆序数。思路: 感觉就是最后一个和第一个交换,然后往中间逼近,到最终的序列,用树状数组求一下逆序数。#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#d原创 2016-08-09 22:51:22 · 430 阅读 · 0 评论 -
hihocoder1475 数组分拆【DP+前缀和优化】
思路:DP[ i ] 代表以 i 结尾的方案数. dp[i] += sum[i] - sum[j - 1] != 0 ? dp[j] : 0 ;对于100%的数据,满足1n 1e5呀,两层for,GG;利用树状数组维护sum[i],存的是以sum[i]的方案数 ,那么每次加上当前所有的方案,减去sum[i]的方案,就好了。这里还有一个小问题就是 |sum[i]|把当原创 2017-03-05 18:28:58 · 124 阅读 · 0 评论