Just a Hook(HD1698)
原体链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698
线段树成段更新
代码:
#include <stdio.h>
#define max 111111
#define lson l,mid,index<<1
#define rson mid+1,r,index<<1|1
int mark[max<<2];
int value[max<<2];
void sum(int index)
{
value[index]=value[index<<1]+value[index<<1|1];
}
void downupdate(int index,int length)
{
if(mark[index])//mark!=0 need to downupdate
{
mark[index<<1]=mark[index<<1|1]=mark[index];
value[index<<1]=(length-(length>>1))*mark[index];
value[index<<1|1]=(length>>1)*mark[index];
mark[index]=0;
}
}
void build(int l,int r,int index)
{
mark[index]=0;
value[index]=1;
if(l==r)return ;
int mid=(l+r)>>1;
build(lson);
build(rson);
sum(index);
}
void update(int l,int r,int index,int updateleft,int updateright,int updatedata)
{
if(updateleft<=l&&updateright>=r)
{
mark[index]=updatedata;
value[index]=(r-l+1)*updatedata;
return ;
}
downupdate(index,r-l+1);
int mid=(l+r)>>1;
if(updateleft<=mid)
update(lson,updateleft,updateright,updatedata);
if(updateright>mid)
update(rson,updateleft,updateright,updatedata);
sum(index);
}
int main()
{
int count,num,group,left,right,data;
scanf("%d",&count);
for(int i=1;i<=count;i++)
{
scanf("%d%d",&num,&group);
build(1,num,1);
while(group--)
{
scanf("%d%d%d",&left,&right,&data);
update(1,num,1,left,right,data);
}
printf("Case %d: The total value of the hook is %d.\n",i,value[1]);
}
}

浙公网安备 33010602011771号