for (i=; i<; i++)
tree[i][]=tree[i][]=i;
for (i=; i>=; i--)
tree[i][]=tree[i+i][],
tree[i][]=tree[i+i+][];
void Down(int x)
{
tree[x+x][]+=tree[x][];
tree[x+x+][]+=tree[x][];
tree[x+x][]+=tree[x][]*
(tree[x+x][]-tree[x+x][]+);
tree[x+x+][]+=tree[x][]*
(tree[x+x+][]-tree[x+x+][]+);
tree[x][]=;
}
int work(int root,int l,int r,int k)
{
if (tree[root][]==l &&
tree[root][]==r)
{
tree[root][]+=k;
tree[root][]+=k*(r-l+);
return ;
}
tree[root][]+=k*(r-l+);
//Down(root);
int mid=(tree[root][]+tree[root][])/;
if (l<=mid)
work(root+root,l,min(mid,r),k);
if (r>mid)
work(root+root+,max(mid+,l),r,k);
// tree[root][3]=tree[root+root][3]+tree[root+root+1][3];
return;
}
int work2(int root,int l,int r)
{
if (tree[root][]==l &&
tree[root][]==r)
return tree[root][];
Down(root);
int mid=(tree[root][]+tree[root][])/;
int p=,q=;
if (l<=mid)
p=work2(root+root,l,min(mid,r));
if (r>mid)
q=work2(root+root+,max(mid+,l),r);
return p+q;
} while (Q--)
{
cin>>A;
if (A==)
{
cin>>x>>y>>z;
work(,x+,y+,z);
}
if (A==)
{
cin>>x>>y;
cout<<work2(,x+,y+);
}
}
tree[i][] 表示编号最小的叶子
tree[i][] 编号最大的叶子
tree[i][] 以i为根,所有叶子一次性全部加的,
总共加了多少。
tree[i][] 以i为根,所有叶子的权值之和是多少

最新文章

  1. SqlBulkCopy批量添加数据
  2. IOS-各控件默认尺寸和参考图标大小
  3. 关于git不区分文件名大小写的处理
  4. 【iCore3 双核心板】例程十六:USB_HID实验——双向数据传输
  5. JS高级程序设计2nd部分知识要点5
  6. [Aaronyang] 写给自己的WPF4.5 笔记[1布局]
  7. jquery input选择弹框
  8. 认识js函数对象(Function Object)
  9. ArrayList,Vector线程安全性测试
  10. hdu 5505 GT and numbers
  11. centos 安装mysqldb 记录
  12. 初涉JavaScript模式 (1) : 简介
  13. UIImage与UIColor互转
  14. php将html转为图片
  15. svn 发布脚本整合
  16. 树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法
  17. StringBuffer 和 StringBuilder 的 3 个区别
  18. ionic1滑动时间选择器
  19. 2019年Python数据挖掘就业前景前瞻
  20. 使用虚拟机VM12安装REHL7

热门文章

  1. css--小白入门篇1
  2. 洛谷——P3275 [SCOI2011]糖果
  3. 关于dijkstra的小根堆优化
  4. I Think I Need a Houseboat POJ - 1005(数学)
  5. Docker从入门到实践
  6. buf.writeInt16BE()函数详解
  7. mappingLocations、mappingDirectoryLocations与mappingJarLocations 区别 (转)
  8. Linux RAR 解压缩
  9. [poj1678]I Love this Game!_博弈论
  10. Hackerrank alien-flowers(数学公式)