树状数组
ijbuhv
这个作者很懒,什么都没留下…
展开
-
hdu 1541 Stars 树状数组模板题
#include#include#includeusing namespace std;const int maxn=15010;const int maxlen=32010;int tree[4*maxn];int lowbit(int n){ return (n&-n);}int getsum(int i){ int sum=0原创 2015-03-06 16:24:57 · 595 阅读 · 0 评论 -
hdu4417Super Mario 树状数组+二分
//给出n个数ai//m次询问l , r ,h//问区间[l,r]中小于h的数的个数//先离线,记录每次询问的区间的位置//然后可以用树状数组知道在为位置i小于h的数的个数//答案就是右边的个数减去左边的个数//ai和h很大,所以用二分记录数找位置#include#include#include#include#include#includeusing namespace原创 2015-10-10 21:16:29 · 348 阅读 · 0 评论 -
hdu5122K.Bro Sorting 树状数组
//给出一个序列, //每一轮可以将一个数与其后面相邻的小于它的//数交换直到其后面的数大于它//问需要交换几次//直接用树状数组找后面有小于它的数的数的个数 #include#include#includeusing namespace std ;const int maxn = 3e6+10 ;int tree[maxn] ;void update(int x , int原创 2015-09-19 11:51:18 · 342 阅读 · 0 评论 -
hdu5372Segment Game 树状数组
//n个输入//a[i] b[i] a[i] = 0 , 加上线段[b[i],b[i]+x] , x为加操作的个数//a[i] = 1 减去第b[i]个加入的线段//问对于每一个新加的区间能够包括有多少完整的区间//可以知道线段的长度是递增的,所以原来的区间的长度没有大于现在的//所以只要求原来的所有区间的左区间大于新加的减去右边大的//然后由于|b[i]|<=1e9//所以先将其原创 2015-11-04 20:18:19 · 321 阅读 · 0 评论 -
hdu5493Queue 树状数组+二分
//在意个队中//每个人知道它的身高和在排在他前面或者后面的//人的身高的个数//问能否恢复原来的队列//如果有多种情况,输出字典序最小的//先将人以身高从小到大排序//然后从第一个人开始插入队列//对于第i个人k即为在其前面或者后面需要留几个位置在它前面或者后面//选择两种插入方式中位置小的一个//可以用树状数组记录空位 , 用二分找位置#include<cstdio>#in原创 2015-09-28 22:56:52 · 692 阅读 · 0 评论 -
hdu4911Inversion 树状数组求逆序对
//给一个序列 , 可以进行k次相邻元素的交换 , 问//问交换后的序列最少有多少个逆序对//很好想到没经过一次相邻的元素的交换 , 逆序对的个数都会剪一//答案直接就是原来的序列的个数-k就行#include#include#include#includeusing namespace std ;const int maxn = 1e5+10 ;typedef long lo原创 2015-09-02 19:17:28 · 814 阅读 · 0 评论 -
hdu4605Magic Ball Game 树状数组
//给一棵树,树的每一个节点的子节点个数是0或2//对于每一个节点都有一个权值w[i]//一个权值为x的球在每一个节点的情况有//x=w[i] 这个球在该点不向下掉//x//x>w[i] 这个球往左节点掉的概率为1/8 , 往右掉的概率为7/8//问对于每一个权值为x其掉到节点为v的概率//对于一颗树从一点到另一点的路径是确定的,只需要记录这条路径中//往左原创 2015-07-24 10:59:21 · 615 阅读 · 0 评论 -
hdu3450Counting Sequences 树状数组
//给一串序列,找出长度大于2,且相邻两个数的差值不大于d的数子序列的个数//dp[u] 表示以u为最后一个点满足条件的序列个数//dp[u] = segma(dp[v] + 1) a[u] - a[v] <= d ;//将用树状数组来找这个求和//不过由于没有给a[i] , 所以需要对每个数编号,然后用二分找其对应的编号#include<cstdio>#include<cstring>原创 2015-07-31 12:46:39 · 1090 阅读 · 0 评论 -
hdu 3874 Necklace 树状数组 离线操作
//对询问进行离线操作,读入所有的询问,然后将所有询问按照右升序排序//在处理第i个询问时,保证从第一个数到第i个询问的右边范围ri的所有和只是前面不相同的点的和//而且每个点的相同点的位置都是在ri范围内最后一个点,由于在第i次询问后的//所有询问的右范围都大于ri,所以删除相同的点不会影响后面的询问#include#include#include#include原创 2015-03-30 18:02:05 · 563 阅读 · 0 评论 -
hdu5147 Sequence II树状数组求逆序对
//用树状数组求出在b前面比b小的数的个数//然后求b后面的顺序对的个数,//枚举b可得quad//由于数列是从1到n的所有数//那么(n-num[j])-(j-1-totol[j])即为第j个数之后比j大的数的个数//其中num[j]表示第j个数,total[j]表示在j之前比j小的数的个数#include#include#includeusing names原创 2015-03-07 15:15:25 · 730 阅读 · 0 评论 -
hdu2838Cow Sorting树状数组求逆序对
//对于数列中的一个数,在它前面比它大的一定要和它交换//在它后面比它小的一定得和它交换//可以用树状数组存入每一个数在它之前比它小的数的个数//那么(i-1)-total[i]为在它前面比它大的数的个数//然后在所有数都存入树状数组后用getsum(num[i])可以求出整个数列中比这个数小的数的个数//那么getsum(num[i])-1-total[i]则为在它之后比它小原创 2015-03-06 20:34:55 · 744 阅读 · 0 评论 -
hdu1394Minimum Inversion Number树状数组求逆序对水题
//ans[i]=ans[i-1]+(n+1)-2*num[i]//num[i]为输入时的数据//ans[i]为m=i时的逆序数//用树状数组求ans[0]的逆序对#include#include#includeusing namespace std;const int maxn=5010;int num[maxn];int tree[maxn];int原创 2015-03-06 18:34:47 · 781 阅读 · 0 评论 -
hdu2852 KiKi's K-Number 树状数组求第k大数
//再求第k大数时只需要getsum(b-1)//b就是a的第k大数//又gesum(b-1)#include#include#includeusing namespace std;const int maxn=100010;int tree[maxn];int lowbit(int i){ return (i&(-i));}int get原创 2015-03-07 17:40:15 · 697 阅读 · 0 评论 -
bestcoder#65ZYB's Premutation 树状数组+二分
#include#include#includeusing namespace std ;const int maxn = 50010 ;int tree[maxn] ;int n ;int getsum(int x){ int sum = 0 ; while(x){ sum += tree[x] ; x -= x&(-x) ; }原创 2015-12-05 21:26:43 · 544 阅读 · 0 评论