线段树求救
  • 板块P1471 方差
  • 楼主osfly
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/4/11 18:31
  • 上次更新2023/10/28 03:58:43
查看原帖
线段树求救
339299
osfly楼主2022/4/11 18:31
#include<cstdio>
#define ls k<<1 
#define rs k<<1|1
int n,m;
double a[100010];
struct node
{
	double val,lz;
}t1[100010<<2],t2[100010<<2];
void pushup(int k)
{
	t1[k].val=t1[ls].val+t1[rs].val;
	t2[k].val=t2[ls].val+t2[rs].val;
}
void pushdown(int k,int l,int r)
{
	if(!t1[k].lz) return ;
	int mid=(l+r)>>1;
	t2[ls].lz+=t2[k].lz;
	t2[rs].lz+=t2[k].lz;
	t2[ls].val+=t1[ls].val*(t2[k].lz*2)+(mid-l+1)*(t2[k].lz*t2[k].lz);
	t2[rs].val+=t1[rs].val*(t2[k].lz*2)+(r-mid)*(t2[k].lz*t2[k].lz);
	t2[k].lz=0;
	t1[ls].lz+=t1[k].lz;
	t1[rs].lz+=t1[k].lz;
	t1[ls].val+=(mid-l+1)*t1[k].lz;
	t1[rs].val+=(r-mid)*t1[k].lz;
	t1[k].lz=0;
}
void build(int k,int l,int r)
{
	if(l==r)
	{
		t1[k].val=a[l];
		t2[k].val=a[l]*a[l];
		return ;
	}
	int mid=(l+r)>>1;
	build(k<<1,l,mid);
	build(k<<1|1,mid+1,r);
	pushup(k);
}
void update(int k,int l,int r,int nl,int nr,int num)
{
	if(l>=nl&&r<=nr)
	{
		t2[k].lz+=num;
		t1[k].lz+=num;
		t2[k].val+=t1[k].val*(num*2)+(r-l+1)*(num*num);
		t1[k].val+=(r-l+1)*num;
		return ; 
	}
	pushdown(k,l,r);
	int mid=(l+r)>>1;
	if(nl<=mid) update(ls,l,mid,nl,nr,num);
	if(nr>mid) update(rs,mid+1,r,nl,nr,num);
	pushup(k);
}
double query(node tree[],int k,int l,int r,int nl,int nr)
{
	if(l>=nl&&r<=nr) return tree[k].val;
	pushdown(k,l,r);
	double ans=0;
	int mid=(l+r)>>1;
	if(nl<=mid) ans+=query(tree,ls,l,mid,nl,nr);
	if(nr>mid) ans+=query(tree,rs,mid+1,r,nl,nr);
	return ans;
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%lf",&a[i]);
	build(1,1,n);
	while(m--)
	{
		int op,l,r;
		double num;
		scanf("%d",&op);
		if(op==1)
		{
			scanf("%d%d%lf",&l,&r,&num);
			update(1,1,n,l,r,num);
		}
		if(op==2)
		{
			scanf("%d%d",&l,&r);
			printf("%.4lf\n",query(t1,1,1,n,l,r)*1.0/(r-l+1)*1.0);
		}
		if(op==3)
		{
			scanf("%d%d",&l,&r);
			double len=(r-l+1)*1.0;
			double _1=query(t1,1,1,n,l,r);
			double _2=query(t2,1,1,n,l,r);
			printf("%.4lf\n",(_2/len)-(_1/len)*(_1/len));
		}
	}
	return 0;
}

全WA,求助

样例能过

2022/4/11 18:31
加载中...