标签:com repr nta example c++ else image print ++
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 36313 Accepted Submission(s):
17713
#include <bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
struct node
{
int l,r,sum,lazy;
}t[maxn<<2];
void build (int l,int r,int i)
{
t[i].r=r;
t[i].l=l;
t[i].lazy=0;
if(l==r)
{
t[i].sum=1;
return ;
}
int mid;
mid=(l+r)>>1;
build(l,mid,i<<1);
build(mid+1,r,i<<1|1);
t[i].sum=(t[i<<1].sum+t[i<<1|1].sum);
}
void pushdown (int i)
{
t[i<<1].lazy = t[i].lazy;
t[i<<1|1].lazy= t[i].lazy;
int len=t[i].r-t[i].l+1;
t[i<<1].sum= (len-len/2)*t[i].lazy;
t[i<<1|1].sum=(len/2)*t[i].lazy;
t[i].lazy=0;
}
void update(int l,int r,int i,int z)
{
if(l<=t[i].l && r>=t[i].r)
{
t[i].lazy=z;
t[i].sum=(t[i].r-t[i].l+1)*z;
}
else
{
if(t[i].lazy) pushdown(i);
int mid=(t[i].r+t[i].l)/2;
if(l<=mid)
update(l,r,i<<1,z);
if(r>=mid+1)
update(l,r,i<<1|1,z);
t[i].sum=(t[i<<1].sum+t[i<<1|1].sum);
}
}
int main()
{
int t1,a,b,z,n,Q;
scanf("%d",&t1);
for(int i=1;i<=t1;i++)
{
scanf("%d",&n);
build(1,n,1);
scanf("%d",&Q);
for(int j=0;j<Q;j++)
{
scanf("%d%d%d",&a,&b,&z);
update(a,b,1,z);
//for(int k=1;k<=19;k++)
//if(t[k].l)
//printf("%d %d=%d lazy:%d\n",t[k].l,t[k].r,t[k].sum,t[k].lazy);
}
printf("Case %d: The total value of the hook is %d.\n",i,t[1].sum);
}
return 0;
}
// pushdown 和 update 函数bug:
修改后ac:
标签:com repr nta example c++ else image print ++
原文地址:http://www.cnblogs.com/liebecelery/p/7800207.html