二维树状数组

二维树状数组入门:

 


http://www.java3z.com/cwbwebhome/article/article1/1369.html?id=4804

很详细

 

题目:HDOJ 1892

        注意点的坐标可以为0所以要细心处理一下 ,

 

然后照着这个题解写,就没问题了:http://blog.csdn.net/x_white/article/details/7982035

再来一道:

PKU 2155: 大致是修改区间求点值的改版也是二维树状数组,还有验证了前面博客上说的: 向上或者向下求区间都没问题

 

pku1990:这个题目大赞,推导神题就是做出来有不一样的赶脚。可见树状数组真是一个神奇的工具 

写给自己看的核心代码: dis[i]+=dis[i-1]+a[i].x;//统计x坐标的和

            ll t=0;// t代表求这个位子与其他点的距离
            int x=a[i].x;
            t+=sum(x,s)*a[i].x-sum(x,ss);//sum(x,s) 统计 x坐标小于a[i].x的个数, sum(x,ss)统计x 坐标小于 a[i].x的坐标和
            t+=dis[i]-sum(x,ss)-a[i].x*(i-1-sum(x,s))-a[i].x;  //X坐标大于a[i].x之和,细心推导一下应该可以出来
            
            ans+=t*a[i].v;
            update(a[i].x,s,1);

            update(a[i].x,ss,a[i].x); 

 

posted on 2014-06-20 16:42  forgot93  阅读(207)  评论(0编辑  收藏  举报

导航