当前位置 : 主页 > 网络编程 > 其它编程 >

[ybtoj高效进阶4.4][线段树]区间修改

来源:互联网 收集:自由互联 发布时间:2023-07-02
[ybtoj高效进阶4.4][线段树]区间修改题目解题思路区间修改用懒标记传递修改的信息如果当前被修改区间被完全包括就累加区间长度*v并打上懒标记以便传递区间累计当前区间被完 [ybtoj 高
[ybtoj高效进阶4.4][线段树]区间修改题目解题思路区间修改用懒标记传递修改的信息如果当前被修改区间被完全包括就累加区间长度*v并打上懒标记以便传递区间累计当前区间被完

[ybtoj 高效进阶 4.4] [线段树] 区间修改

题目

在这里插入图片描述 在这里插入图片描述


解题思路

区间修改 用懒标记传递修改的信息 如果当前被修改区间被完全包括就累加区间长度*v 并打上懒标记以便传递

区间累计 当前区间被完全包括直接返回值 否则分两段统计


代码

#include#includeusing namespace std;int n,m,l,r,v,w,a[5000100],d[5000100];long long sum[5000100];void build(int k,int l,int r){if (lr){sum[k]a[l];return;}int mid(lr)/2;build(k*2,l,mid);build(k*21,mid1,r);sum[k]sum[k*2]sum[k*21];}void add(int k,int l,int r,int v){d[k]v; //懒标记sum[k](long long)v*(long long)(r-l1); //累加修改}void pdown(int k,int l,int r,int mid){if (!d[k]) return; //懒标记没有标记过不用传递add(k*2,l,mid,d[k]);add(k*21,mid1,r,d[k]); //传递修改它的子节点d[k]0;}void change(int k,int l,int r,int x,int y){if (x

上一篇:求一个JS的IP地址段限制程序。
下一篇:没有了
网友评论