HDU 1698 Just a Hook

来源:互联网 发布:淘宝开店教学大纲 编辑:程序博客网 时间:2024/06/05 19:18

和poj3498差不多,lazy思想

#include <iostream>#include <cstdio>#include <memory.h>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn=100000;int sum[maxn<<2],f[maxn<<2],N,Q;void pushUp(int rt){sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void pushDown(int rt,int m){if(f[rt]){f[rt<<1]=f[rt<<1|1]=f[rt];sum[rt<<1]=f[rt]*(m-(m>>1));sum[rt<<1|1]=f[rt]*(m>>1);f[rt]=0;}}void build(int l,int r,int rt){sum[rt]=1;f[rt]=0;if(l==r)return;int m=(l+r)>>1;build(lson),build(rson);pushUp(rt);}void update(int L,int R,int v,int l,int r,int rt){if(L<=l&&r<=R){f[rt]=v;sum[rt]=v*(r-l+1);return;}pushDown(rt,r-l+1);int m=(l+r)>>1;if(L<=m)update(L,R,v,lson);if(R>m)update(L,R,v,rson);pushUp(rt);}int query(int l,int r,int rt){if(l==r)return sum[rt];pushDown(rt,r-l+1);int m=(l+r)>>1,ret=0;ret+=query(lson);ret+=query(rson);return ret;}int main(){int t,cas=1;scanf("%d",&t);while (t--){scanf("%d%d",&N,&Q);build(1,N,1);for (int i=0;i<Q;++i){int a,b,c;scanf("%d%d%d",&a,&b,&c);if(a>b)swap(a,b);update(a,b,c,1,N,1);}printf("Case %d: The total value of the hook is %d.\n",cas++,query(1,N,1));}return 0;}


原创粉丝点击