您的位置:首页 > 其它

hdu:1556 Just a Hook

2016-07-05 22:18 344 查看
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=2100010;
int t,n,q;
int sum[maxn*4],mar[maxn];
void build(int l,int r,int i)
{    mar[i]=0;
if(l==r)
{
sum[i]=1;
return;
}
int mid=(l+r)>>1;
build(l,mid,i<<1);
build(mid+1,r,i<<1|1);
sum[i]=sum[i<<1]+sum[i<<1|1];
}
void pushdown(int i,int m)
{
if(mar[i])
{
mar[i<<1]=mar[i];
mar[i<<1|1]=mar[i];
sum[i<<1]=mar[i]*(m-(m>>1));
sum[i<<1|1]=mar[i]*(m>>1);
mar[i]=0;
}
}
void updata(int L,int R,int d,int l,int r,int i)
{
if(L<=l&&r<=R)
{
mar[i]=d;
sum[i]=d*(r-l+1);
return;
}
pushdown(i,r-l+1);
int mid=(l+r)>>1;
if(L<=mid)
updata(L,R,d,l,mid,i<<1);
if(R>mid)
updata(L,R,d,mid+1,r,i<<1|1);
sum[i]=sum[i<<1]+sum[i<<1|1];

}
int main()
{
scanf("%d",&t);
for(int cnt=1;cnt<=t;cnt++)
{
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
sum[i]=1;
build(1,n,1);
int x,y,d;
while(q--)
{
scanf("%d%d%d",&x,&y,&d);
updata(x,y,d,1,n,1);
}

printf("Case %d: The total value of the hook is %d.\n",cnt,sum[1]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: