当前位置: 首页 > news >正文

题解:P1471 方差

【题目传送门】

一眼分块能做,然后就来开始做。狠狠地做。

构造

我们考虑根号分治,对于每个块我们开:当前的数值和 \(sum1\),当前的数值平方的和 \(sum2\),当前的数值的 \(\operatorname {lazy}\) 数组。
这道题最阴险的地方是它的输入不是全部整数,但是样例给的是正整数,然后我给我数组全部开的 \(\operatorname {int}\) 类型,听取 WA 声一片。

修改

  • 我们对于散块直接暴力处理,主要是不要忘了更新 \(sum1、sum2\)
  • 我们对于整块的处理就更加直接,直接叠加到 \(\operatorname{lazy}\) 里面就好。

平均值查询

通过 \(sum1+tag\times len\) 直接可以得出。

方差查询

我们要开始推式子了。
我们求方差的式子是:

\[\begin{equation} \begin{split} len=r-l+1,\\ s^2&=\frac{\sum^{r}_{i=l}(\ x_i\ -\bar{\ x\ })^2}{len} \\&=\frac{\sum^{r}_{i=l}(x_i^2\ -\ 2\cdot\bar{\ x\ }\cdot x_i\ +\ \bar{\ x\ }^2)}{len}\\&=\frac{\sum^{r}_{i=l}x_i^2}{len}\ -2\cdot\bar{\ x\ }\cdot\frac{\sum^{r}_{i=l}x_i}{len}\ +\ \bar{\ x\ }\cdot\frac{\sum^{r}_{i=l}\bar{\ x\ }}{len}\\&=\frac{\sum^{r}_{i=l}x_i^2}{len}\ -2\cdot\bar{\ x\ }^2\ +\ \bar{\ x\ }^2\\&=\frac{\sum^{r}_{i=l}x_i^2}{len}\ -\bar{\ x\ }^2 \end{split} \end{equation} \]

也就是我们要知道某个区间的方差只需要知道改区间的平方和以及平均数就好了,显然,平均数可以直接套用操作 \(1\) 前面我们写的代码。
我们由于这个 \(lazy\_tag\) (下称 \(tag\))存在,显然不是很好直接处理这个平方和的式子,但是不用 \(tag\) 又不行,那我们只能继续推式子寻找破局之道了(这里的 \(tag\) 设为 \(k\)):

\[\begin{equation} \begin{split} sum^2&=\sum_{i=l}^{r}(x_i+k)\\&=\sum^{r}_{i=l}x_i^2\ +\ 2k\cdot\sum^r_{i=l}x_i\ +\ nk^2 \end{split} \end{equation} \]

秒杀,下面是代码。

\(\mathcal{CODE}\)

#include<bits/stdc++.h>
using namespace std;
#define itn int
#define reaD read
#define int long long
inline void read(int &x){x=0;int p=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')p=-1;ch=getchar();}while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}x*=p;
}
void write(int x){if(x<0){putchar('-');x*=-1;}if(x<10){putchar(x+48);return;}write(x/10);putchar(x%10+48);
}
const int N=1e5+1000,M=800;
int n,m,pos[N],L[M],R[M],cnt,len;
double tag[M],sum1[M],sum2[M],a[N];void init(){len=(int)sqrt(n);cnt=(n-1)/len+1;for(int i=1;i<=n;i++){pos[i]=(i-1)/len+1;}for(int i=1;i<=cnt;i++){L[i]=(i-1)*len+1;R[i]=min(n,i*len);for(int j=L[i];j<=R[i];j++){sum1[i]+=a[j];sum2[i]+=a[j]*a[j];}}
}void catter(int l,int r,double c){for(int i=l;i<=r;i++){sum2[pos[l]]+=(a[i]+c)*(a[i]+c)-a[i]*a[i];a[i]+=c;}sum1[pos[l]]+=1.0*(r-l+1)*c;
}void pre_block(int id,double c){tag[id]+=c;
}void update(int l,int r,double c){if(pos[l]==pos[r]){catter(l,r,c);return;}catter(l,R[pos[l]],c);catter(L[pos[r]],r,c);for(int i=pos[l]+1;i<pos[r];i++){pre_block(i,c);}return;
}double query_catter1(int l,itn r){double res=0;for(int i=l;i<=r;i++){res+=a[i];}res+=(r-l+1)*tag[pos[l]];return res;
}double query_block1(int id){double res=0;res+=sum1[id];res+=(R[id]-L[id]+1)*tag[id];return res;
}double query1(int l,int r){if(pos[l]==pos[r]){double res=query_catter1(l,r);return 1.0*res/(r-l+1);}double res=0;res+=query_catter1(l,R[pos[l]]);res+=query_catter1(L[pos[r]],r);for(int i=pos[l]+1;i<pos[r];i++){res+=query_block1(i);}return res/(r-l+1);
}double query_catter2(int l,int r){double res=0;for(int i=l;i<=r;i++){res+=(a[i]+tag[pos[l]])*(a[i]+tag[pos[l]]);}return res;
}double query_block2(int id){double res=0;res+=sum2[id];res+=2*tag[id]*sum1[id];res+=(1.0*R[id]-L[id]+1)*tag[id]*tag[id];return res;
}double query2(int l,int r){if(pos[l]==pos[r]){double res1=query_catter2(l,r);double res2=query_catter1(l,r);// cout<<"res1:"<<res1<<" res2:"<<res2<<endl;double ans=1.0*res1/(r-l+1);ans-=(res2/(r-l+1))*(res2/(r-l+1));return ans;}double res1=0,res2=0;res1+=query_catter2(l,R[pos[l]]);res1+=query_catter2(L[pos[r]],r);res2+=query_catter1(l,R[pos[l]]);res2+=query_catter1(L[pos[r]],r);for(int i=pos[l]+1;i<pos[r];i++){res1+=query_block2(i);res2+=query_block1(i);}double ans=res1/(r-l+1);ans-=(res2/(r-l+1))*(res2/(r-l+1));// cout<<"res1:"<<res1<<" res2:"<<res2<<endl;return ans;
}main(void){// ios::sync_with_stdio(false);// cin.tie(nullptr);// cout.tie(nullptr);read(n);read(m);for(int i=1;i<=n;i++){cin>>a[i];}// for(int i=1;i<=n;i++){// printf("%.2lf\n",a[i]);// }init();for(int i=1,top,l,r;i<=m;i++){read(top);double c;if(top==1){read(l);read(r);cin>>c;update(l,r,c);}if(top==2){read(l);read(r);printf("%.4lf\n",query1(l,r));}if(top==3){read(l);read(r);printf("%.4lf\n",query2(l,r));}}
}
http://www.jsqmd.com/news/53761/

相关文章:

  • 2025英国留学中介哪个最好
  • 2025 年 11 月中国水泵厂家权威推荐榜:消防/多级/自吸/磁力/排污/真空/离心/卧式水泵全品类实力解析与高效选购指南
  • 2025年质量好的道路景观亮化工程优质企业榜单
  • 2025 年纸盖机成型机权威榜单:纸杯机、制杯机、全伺服纸杯机、纸碗机、纸盖机、纸咖啡杯机、超声波纸杯机、纸盘机智能化制造设备优选
  • AI时代资料收录的理论建构与实践逻辑
  • 2025 年 11 月热回收设备厂家权威推荐榜:热回收转轮、热管热回收、三维热管、U型热管、分解式乙二醇及烟气余热回收系统高效节能解决方案
  • rust语言Drop特征
  • 2025年11月营销智能体推荐榜单:基于市场数据的权威分析与选择指南
  • AssemblyLoadContext 的研究笔记
  • 2025年度中频炉靠谱厂家排名:500公斤中频炉/铝壳中频炉
  • 2025 年 11 月超声设备厂家权威推荐榜:覆盖河北、山西、辽宁、江苏、浙江、山东、广东等区域,精准成像与高效诊断的行业优选
  • Gerrit新增标签
  • 2025 年 11 月工业气体检测设备厂家权威推荐榜:密闭采样器、气体报警器、气体探测器、在线气体分析仪,精准监测与安全防护首选
  • 2025CMDB 厂商选型攻略:从全栈纳管到一体化运维,企业级配置管理核心指南
  • 2025年质量好的同步反弹缓冲托底轨/缓冲托底轨热门厂家推荐榜单
  • 2025 年超声波清洗设备厂家最新推荐榜,聚焦技术实力与市场口碑深度解析及优质品牌筛选龙门式 / 全自动 / 多臂式 / 履带式 / 通过式超声波清洗设备推荐
  • 2025年知名的工程液压油缸/一顺液压油缸最新TOP品牌厂家排行
  • 2025 年 11 月电动牙刷品牌权威推荐榜:声波/旋转/磁悬浮/叠振/扫振/旋振/智能/便携/儿童/成人全系列深度测评与选购指南
  • 2025年比较好的反弹钢珠轨厂家推荐及选择指南
  • 2025上海留学中介十大排名
  • 详细介绍:macOS 一键免密登录阿里云 ECS:SSH 密钥对认证完整指南
  • 2025 超声波清洗机源头厂家最新推荐排行榜:全品类设备适配多场景,深度解析核心优势全自动 / 多臂式 / 多槽式 / 履带式 / 通过式 / 单槽式 / 摆动式 / 平移式超声波清洗机公司推荐
  • 2025擅长香港留学的中介机构推荐
  • 2025年螺旋电动压力机直销厂家权威推荐:数控电动螺旋压力机/1000吨电动螺旋压力机/直驱电动螺旋压力机源头厂家精选
  • 界面简洁,上手快!适合新手的免费PPT生成软件推荐 - 实践
  • 日活10万的APP,如何精准计算广告收益? - 详解
  • AI如何消除决策疲劳:从厨房到职场的智能工作革命
  • 2025 年 11 月电动伸缩门厂家权威推荐榜:悬浮门/空降闸/工业伸缩门,智能防护与耐用品质深度解析
  • ASCII码进制对照表 - wanghongwei
  • complex复数