线段树区间更新&&HDU1698模板

#include#include#include#include#include#include#include#include using namespace std;struct node{ int l; int r; int sum; int mark;}q[500000];void pushup(int i){ q[i].sum=q[i*2].sum+q[i*2+1].sum; return;}void pushdown(int i){ q[i*2].mark=q[i].mark; q[i*2].sum=(q[i*2].r-q[i*2].l+1)*q[i].mark; q[i*2+1].mark=q[i].mark; q[i*2+1].sum=(q[i*2+1].r-q[i*2+1].l+1)*q[i].mark; q[i].mark=0; return;}void build(int l,int r,int i){ q[i].l=l; q[i].r=r; q[i].mark=0; if(l==r) { q[i].sum=1; return; } int mid=(l+r)/2; build(l,mid,i*2); build(mid+1,r,i*2+1); pushup(i);}void change(int l,int r,int k,int i){ if(q[i].l==l&&q[i].r==r) { q[i].sum=(q[i].r-q[i].l+1)*k; q[i].mark=k; return; } if(q[i].mark!=0) { pushdown(i); } int mid=(q[i].l+q[i].r)/2; if(l>mid) { change(l,r,k,i*2+1); } else if(mid>=r) { change(l,r,k,i*2); } else { change(l,mid,k,i*2); change(mid+1,r,k,i*2+1); } pushup(i);}int query(int l,int r,int i){ if(q[i].l>=l&&q[i].r<=r) { return q[i].sum; } int mid=(q[i].l+q[i].r)/2; if(mid=r) { return query(l,r,i*2); } else return query(l,mid,i*2)+query(mid+1,r,i*2+1);}int main(void){ int i,j,k,n,m,t,tt,x,y; scanf("%d",&t); for(tt=1;tt<=t;tt++) { scanf("%d",&n); build(1,n,1); scanf("%d",&m); for(i=0;i<m;i++) { scanf("%d%d%d",&x,&y,&k); change(x,y,k,1); } printf("Case %d: The total value of the hook is %d.\n",tt,query(1,n,1)); }}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值