hdu 1698 Just a Hook 只是一个钩

来源:互联网 发布:淘宝摄影师招聘 编辑:程序博客网 时间:2024/06/02 23:33
这道题是一道线段树的成段更新的题目,刚开始做的时候没A过去,后来看别人的解题报告,代码如下。
#include<stdio.h>#include<string.h>#define maxn 100005int a[maxn*4];int s[maxn*4];void push(int rt){a[rt]=a[rt*2]+a[rt*2+1];}void pdown(int rt, int x){    if(s[rt]!=-1) {        s[rt*2]=s[rt*2+1] = s[rt];        a[rt*2]=(x-(x/2))*s[rt];///!!!        a[rt*2+1]=(x/2)*s[rt];///!!!        s[rt]=-1;    }}void build(int l, int r, int rt){    s[rt]=-1, a[rt]=1;    if(l == r) return;    int mid=(l+r)/2;    build(l, mid, rt*2);    build(mid+1, r, rt*2+1);    push(rt);}void update(int l, int r, int x, int L, int R, int rt){    if(l<=L&&r>=R) {        s[rt]=x;        a[rt]=x*(R-L+1);///!!!        return;    }    pdown(rt, R-L+1);///!!!    int mid =(L+R)/2;    if(l <= mid) update(l, r, x, L, mid, rt<<1);    if(r > mid) update(l, r, x, mid+1, R, rt<<1|1);    push(rt);}int main(){int k=0;int n,t,q,x,y,w;while(~scanf("%d",&t)){while(t--){scanf("%d%d",&n,&q);build(1,n,1);while(q--){scanf("%d%d%d",&x,&y,&w);update(x,y,w,1,n,1);}printf("Case %d: The total value of the hook is %d.\n", ++k, a[1]);}return 0;}}

0 0
原创粉丝点击