首页 > 编程知识 正文

lingo线性规划例题,利用问题树分析复杂问题案例

时间:2023-05-04 11:28:33 阅读:47445 作者:17

这个问题是线段树的模板问题

但是,与前面的问题不同,这个问题是区间修正,所以引入lazy tag。

如果直接修改行树中的所有儿子,时间会超限,我们可以直接将父亲的值传递给美丽的香气,用lazy tag标记,需要使用当前子树时继续传递lazy tag即可。

代码# include iostream # include cstdio # includecmathusingnamespacestd; 长龙w,l,r,xx,n,q; 结构节点{ long long sum,lazy; }tree[4000010]; voidbuild(longlongk,long long l,long long r ) if ) l==r ) Scanf ) ' %lld ',tree[k].sum ); 返回; )长龙mid=(lr ) 1; build(k*2、l、mid ); Build(k*21、mid 1、r ); tree [ k ].sum=tree [ k *2].sumtree [ k * 21 ].sum; }voidadd(longlongk,long long l,long long r,long long v ) {tree[k].lazy=v; tree[k].sum=v*(r-L1 ); }voidpushdown(longlongk,long long l,long long r,long long mid ) if (! tree [ k ].lazy (返回; add(k*2,l,mid,tree[k].lazy ); add(k*21,mid 1,r,tree[k].lazy ); tree[k].lazy=0; ) voidchange(longlongk,long long x,long long y,long long l,long long r ) ) longlongmid=(Lr ) 1; if(x=lr=y ) add ) k、l、r、xx ); 返回; }推式下降(k、l、r、mid ); if(x=mid )变更(k * 2,x,y,l,mid ); if(ymid )变更(k * 21,x,y,mid 1,r ); tree [ k ].sum=tree [ k *2].sumtree [ k * 21 ].sum; }长时间查询(长时间k,长时间x,长时间y,长时间l,长时间r ) ) if(x=lr=y )返回树[ k ].sum; 长长度mid=(lr ) 1,js=0; 推送下压(k、l、r、mid ); if(x=mid ) js=query ) k*2,x,y,l,mid ); if(ymid ) js=query(k*21,x,y,mid 1,r ); 返回Js; (}int main ) ) {cinnq; build (1,1,n ); for (长龙I=1; i=q; I )扫描(' % lld % lld % lld )、w、l、r ); if(w==1) scanf ) ' %lld ',xx ); 变更(1,l,r,1,n ); (if ) w==2) printf('%lld(n ),query(1) ) 1,l,r,1,n ); }返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。