二维树状数组

二维树状数组入门:

 


很详细

 

题目: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); 

 

转载于:https://www.cnblogs.com/forgot93/p/3799676.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值