
树状数组
zhhx2001
这个作者很懒,什么都没留下…
展开
-
二维树状数组上帝造题的七分钟(tyvj1716)
给定空矩阵,1.将一个矩阵一起加x2.询问一个矩阵的和先类似差分,搞一搞,通过sum【i】【j】=sigema{b[i][j]*(n-i+1)*(m-j+1) }推一推更新时,根据当前树状数组所存内容更新,such as 这种题,一套猛推公式,代入代码,求bi.add(xx+1,y,-(xx+1)*z);//因为bi存的是b【i】【j】*i,所以这个位置加一个值,这个值要乘上原创 2016-07-22 15:09:31 · 477 阅读 · 0 评论 -
二维树状数组poj1195
#include#include#include#include#includeusing namespace std;int a[2000][2000];int n;int lowbit(int x){ return x&(-x);}void add(int x,int y,int d){ for (int i=x;i<=n;i+=lowbit(i)) for (原创 2016-07-15 20:10:55 · 250 阅读 · 0 评论 -
codeforces 365
A:略B:给出n个点,所有的点要以1>2>3.....n>1,的连接道路成为一个环,这n个点当中有k个capital,这k个capital必须和所有的点有直接通道,每一个点有一个权值,每一条道路的权值为两端点u,v的权值之积。问总的权值之和先把每个点围成的环形的道路的值算出来,再枚举每一个capita,计算这个点和除了相邻点连接的路的权值之和,其实就是总权值减去当前点相邻点原创 2016-08-05 14:49:17 · 303 阅读 · 0 评论 -
逆序对
对于一个包含N个非负整数的数组A[1..n],如果有i A[ j ],则称(A[ i] ,A[ j] )为数组A中的一个逆序对。 一般是求整个数列的逆序对个数,主要 的方法有树状数组和归并排序的方法。树状数组:维护一个权值的树状数组,从左向右扫,对于每一个a【i】,在权值树状数组中求出小于a【i】的数的个数,因为从左到右,所以之前已经保证数据结构中的数是排在i之前的了。归并排序原创 2016-09-03 13:01:43 · 1044 阅读 · 0 评论 -
bzoj3289(莫队+树状数组求逆序对)
给出一个序列,每次询问一个区间,将这个区间变为升序的最小操作次数,每次可以交换相邻的两个数。 每个询问就是典型的,求逆序对,通过分析发现,其实是可以转移的。当然这里只能用树状数组来转移。归并排序只能做整体的逆序对计算,通过这题,树状数组的优势就出来了。左边删除添加一个数,就是在树状数组中找小于他的数。右边删除添加一个数,就是在树状数组中找大于他的数。ans表示当前区间的逆序对。由此原创 2016-09-03 15:50:26 · 427 阅读 · 0 评论