成段更新总区间求和.HDU-1698 Just…
2014-03-20 13:00
411 查看
HDU-1698 Just a
Hook
题目大意:给定 N 根木棒,编号 1 到 N
进行管理。有三种颜色 1、2、3,
分别对应值 1、2、3,初始化为 1。
现在要求对一段连续编号的木棒进行染色,例:i j
z 表示将 i 到 j 号木棒染成颜色 z。
求 进行 M 次操作后总值。
#include <iostream>
#include <cstdio>
#define LL(x) ((x)<<1)
#define RR(x) ((x)<<1|1)
#define Max 100005
int n;
struct Seg_Tree
{
int left,right;
int col;
//该段的颜色
1、2、3;标记-1 表示该段不为纯色。
}tt[Max<<2];
void build(int left,int right,int idx)
{
tt[idx].left =
left;
tt[idx].right =
right;
tt[idx].col = 1;
//初始化时所有存在的线段都为1
if(left == right)
return ;
int mid = (left +
right)/2;
build(left,mid,LL(idx));
build(mid+1,right,RR(idx));
}
void update(int left,int right,int col,int idx)
//从left到right更改为col
{
/
int mid = (tt[idx].left
+ tt[idx].right)/2;
if(right
<= mid)
{
return
query(left,right,LL(idx));
}
else if(left
> mid)
{
return
query(left,right,RR(idx));
}
else
{
return
query(left,mid,LL(idx)) + query(mid+1,right,RR(idx));
}
}
int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
for(int
cas=0;cas<T;cas++)
{
int n , m ;
scanf("%d",&n);
build(1,n,1);
scanf("%d",&m);
while(m --)
{
int
left,right,col;
scanf("%d%d%d",&left,&right,&col);
update(left,right,col,1);
}
printf("Case %d: The
total value of the hook is %d.\n",cas+1,query(1,n,1));
}
return 0;
}
Hook
题目大意:给定 N 根木棒,编号 1 到 N
进行管理。有三种颜色 1、2、3,
分别对应值 1、2、3,初始化为 1。
现在要求对一段连续编号的木棒进行染色,例:i j
z 表示将 i 到 j 号木棒染成颜色 z。
求 进行 M 次操作后总值。
#include <iostream>
#include <cstdio>
#define LL(x) ((x)<<1)
#define RR(x) ((x)<<1|1)
#define Max 100005
int n;
struct Seg_Tree
{
int left,right;
int col;
//该段的颜色
1、2、3;标记-1 表示该段不为纯色。
}tt[Max<<2];
void build(int left,int right,int idx)
{
tt[idx].left =
left;
tt[idx].right =
right;
tt[idx].col = 1;
//初始化时所有存在的线段都为1
if(left == right)
return ;
int mid = (left +
right)/2;
build(left,mid,LL(idx));
build(mid+1,right,RR(idx));
}
void update(int left,int right,int col,int idx)
//从left到right更改为col
{
/
int mid = (tt[idx].left
+ tt[idx].right)/2;
if(right
<= mid)
{
return
query(left,right,LL(idx));
}
else if(left
> mid)
{
return
query(left,right,RR(idx));
}
else
{
return
query(left,mid,LL(idx)) + query(mid+1,right,RR(idx));
}
}
int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
for(int
cas=0;cas<T;cas++)
{
int n , m ;
scanf("%d",&n);
build(1,n,1);
scanf("%d",&m);
while(m --)
{
int
left,right,col;
scanf("%d%d%d",&left,&right,&col);
update(left,right,col,1);
}
printf("Case %d: The
total value of the hook is %d.\n",cas+1,query(1,n,1));
}
return 0;
}
相关文章推荐
- hdu 1698 Just a Hook (成段更新+总区间求和)
- hdu 1698 Just a hook 线段树 成段更新~~区间求和
- hdu 1698__Just a Hook(区间求和,成段更新)
- hdu 1698 Just a Hook(线段树 成段更新+总区间求和)
- 更新节点区间求和-&nbsp;HDU&nbsp;1166&nbsp;敌兵…
- http://acm.hdu.edu.cn/showproblem.php?pid=1166&&线段树区间求和
- HDU 1698 Just a Hook(线段树成段更新求和)
- hdu 1698 Just a Hook(线段树区间更新求和)
- hdu1698 Just a Hook 线段树:成段替换,总区间求和
- hdu 1698 Just a Hook(线段树的区间更新及求和)
- HDU 1689 Just a Hook 线段树区间更新求和
- HDU 1698 Just a Hook 线段树区间更新求和
- HDU 1698 just a hook 线段树,区间定值,求和
- hdu1698 Just a Hook (线段树功能:成段替换,总区间求和)
- hdu(1698)——Just a Hook(成段更新,节点求和,lazy思想)
- HDU 1166 敌兵布阵(区间求和&(线段树|树状数组))
- HDU 1698——Just a Hook——————【线段树区间替换、区间求和】
- POJ 3468 A Simple Problem with Integers(段更新的区间求和&Lazy思想&线段树)
- http://acm.hdu.edu.cn/showproblem.php?pid=1698 成段更新,总区间求和
- HDU: 2015 偶数求和