首页 > 代码库 > hdu 1698 Just a Hook
hdu 1698 Just a Hook
http://acm.hdu.edu.cn/showproblem.php?pid=1698
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define maxn 100010 5 #define ll __int64 6 using namespace std; 7 8 int n,x1,x2,c,m; 9 struct node10 {11 int l,r;12 int cover;13 } tree[maxn*4];14 15 void build(int i,int l,int r)16 {17 tree[i].l=l;18 tree[i].r=r;19 tree[i].cover=1;20 if(l==r) return ;21 int mid=(l+r)>>1;22 build(i<<1,l,mid);23 build(i<<1|1,mid+1,r);24 }25 26 void down(int i)27 {28 if(tree[i].l==tree[i].r) return ;29 if(tree[i].cover!=-1)30 {31 tree[i<<1].cover=tree[i].cover;32 tree[i<<1|1].cover=tree[i].cover;33 tree[i].cover=-1;34 }35 }36 void update(int i,int l,int r,int c)37 {38 if(tree[i].cover==c) return;39 if(tree[i].l==l&&tree[i].r==r)40 {41 tree[i].cover=c;42 return ;43 }44 down(i);45 int mid=(tree[i].l+tree[i].r)>>1;46 if(r<=mid)47 {48 update(i<<1,l,r,c);49 }50 else if(l>mid)51 {52 update(i<<1|1,l,r,c);53 }54 else55 {56 update(i<<1,l,mid,c);57 update(i<<1|1,mid+1,r,c);58 }59 }60 61 ll search1(int i)62 {63 if(tree[i].cover!=-1)64 {65 return (tree[i].r-tree[i].l+1)*tree[i].cover;66 }67 down(i);68 return search1(i<<1)+search1(i<<1|1);69 }70 int main()71 {72 int t;73 scanf("%d",&t);74 int cas=1;75 while(t--)76 {77 scanf("%d",&n);78 scanf("%d",&m);79 build(1,1,n);80 for(int i=1; i<=m; i++)81 {82 scanf("%d%d%d",&x1,&x2,&c);83 update(1,x1,x2,c);84 }85 printf("Case %d: The total value of the hook is %I64d.\n",cas,search1(1));86 cas++;87 }88 return 0;89 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。