社区讨论
听取wa声一片,样例都没过,求大佬调试
P1471方差参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lzum3hgz
- 此快照首次捕获于
- 2024/08/15 09:38 2 年前
- 此快照最后确认于
- 2024/08/15 11:30 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-12;
double a[100010],d[401010],tag[400010],w,d1[400001];
int n,m,op,u,v;
void pushdown(int cur,int l,int r)
{
if(fabs(tag[cur])>eps)
{
int mid=(l+r)>>1;
d1[cur*2]+=2*tag[cur]*d[cur*2]+(mid-l+1)*tag[cur]*tag[cur];
d1[cur*2+1]+=2*tag[cur]*d[cur*2+1]+(r-mid)*tag[cur]*tag[cur];
d[cur*2]+=tag[cur]*(mid-l+1);
d[cur*2+1]+=tag[cur]*(r-mid);
tag[cur*2]+=tag[cur];
tag[cur*2+1]+=tag[cur];
tag[cur]=0;
}
}
void build(int s,int t,int p)
{
if (s==t)
{
d[p]=a[s];
d1[p]=a[s]*a[s];
return;
}
int mid=(t+s)>>1;
build(s,mid,p*2);
build(mid+1,t,p*2+1);
d[p]=d[p*2]+d[p*2+1];
d1[p]=d1[p*2]+d1[p*2+1];
}
double query1(int l,int r,int s,int t,int p)
{
if (l<=s&& t<=r)
return d[p];
int mid=(t+s)>>1;
double sum=0;
pushdown(p,s,t);
if (l<=mid)sum+=query1(l,r,s,mid,p*2);
if (r>mid)sum+=query1(l,r,mid+1,t,p*2+1);
return sum;
}
double query2(int l,int r,int s,int t,int p)
{
if (l<=s&& t<=r)
return d1[p];
int mid=(t+s)>>1;
double sum=0;
pushdown(p,s,t);
if (l<=mid)sum+=query2(l,r,s,mid,p*2);
if (r>mid)sum+=query2(l,r,mid+1,t,p*2+1);
return sum;
}
void Modify(int l,int r,int s,int t,int p,double sum)
{
int mid=(t+s)>>1;
if(l<=s&&t<=r)
{
tag[p]+=sum;
d[p]+=sum*(t-s+1);
return;
}
pushdown(p,s,t);
if (l<=mid)Modify(l,r,s,mid,p*2,sum);
if (r>mid)Modify(l,r,mid+1,t,p*2+1,sum);
d[p]=d[p*2]+d[p*2+1];
d1[p]=d1[p*2]+d1[p*2+1];
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
build(1,n,1);
for(int i=1;i<=m;i++)
{
cin>>op>>u>>v;
if(op==1)
{
cin>>w;
Modify(u,v,1,n,1,w);
}
else
if(op==2)
{
cout<<fixed<<setprecision(4)<<query1(u,v,1,n,1)/(v-u+1)<<endl;
}
else
if(op==3)
{
cout<<query2(u,v,1,n,1)<<" "<<query1(u,v,1,n,1)<<endl;
double sum1=query2(u,v,1,n,1)/(v-u+1),sum2=query1(u,v,1,n,1)/(v-u+1);
double ans=sum1-sum2*sum2;
cout<<fixed<<setprecision(4)<<ans<<endl;
}
}
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...