题目

https://loj.ac/problem/2005

思路

\[\sum_{L}^{R}{(x_i-x)^{2}}
\]

\[\sum_{L}^{R}{(x_i^2-2*x_i*x+x^{2})}
\]

\[\sum_{L}^{R}{x_i^2}-2*x*\sum_{L}^{R}x_i+(r-l+1)x^{2}
\]

\[\sum_{L}^{R}x_{i}^2-2*\frac{1}{r-l+1}(\sum_{L}^{R}x_i)^2+\frac{1}{r-l+1}*(\sum_{L}^{R}x)^2
\]

\[\sum_{L}^{R}x_{i}*x_{i}-\frac{1}{r-l+1}\sum_{L}^{R}x_i*\sum_{L}^{R}x_i
\]

\[\sum_{L}^{R}(x_i-x)(y_i-y)
\]

\[\sum_{L}^{R}(x_i*y_i-x*y_i-y*x_i+x*y)
\]

\[\sum_{L}^{R}x_i*y_i-\sum_{L}^{R}x_i*y-\sum_{L}^{R}y_i*x+(r-l+1)*x*y
\]

\[\sum_{L}^{R}x_i*y_i-\frac{1}{r-l+1}\sum_{L}^{R}x_i\sum_{L}^{R}*y_i-\frac{1}{r-l+1}\sum_{L}^{R}*x_i\sum_{L}^{R}y_i+(r-l+1)*x*y
\]

\[\sum_{L}^{R}x_i*y_i-\frac{2}{r-l+1}\sum_{L}^{R}x_i\sum_{L}^{R}*y_i+\frac{1}{(r-l+1)}\sum_{L}^{R}x_i*\sum_{L}^{R}y_i
\]

\[\sum_{L}^{R}x_i*y_i-\frac{1}{r-l+1}\sum_{L}^{R}x_i\sum_{L}^{R}*y_i
\]

\[\frac{\sum_{L}^{R}x_i*y_i-\frac{1}{r-l+1}\sum_{L}^{R}x_i\sum_{L}^{R}*y_i}{\sum_{L}^{R}x_{i}*x_{i}-\frac{1}{r-l+1}\sum_{L}^{R}x_i\sum_{L}^{R}x_i}
\]

其实不用这么麻烦的、、

好了,剩下的去维护吧

好吧,我太菜了

要开long doule

代码

  1. #include <bits/stdc++.h>
  2. #define ll long double
  3. #define ls rt<<1
  4. #define rs rt<<1|1
  5. using namespace std;
  6. const int N=2e5+7;
  7. int read() {
  8. int x=0,f=1;char s=getchar();
  9. for (;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
  10. for (;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
  11. return x*f;
  12. }
  13. ll x[N],y[N];
  14. struct node {
  15. int l,r,siz;
  16. ll tot[2],pingfang,chengji;
  17. ll lazy,S,T;
  18. }e[N<<2];
  19. void pushup(int rt) {
  20. e[rt].tot[0]=e[ls].tot[0]+e[rs].tot[0];
  21. e[rt].tot[1]=e[ls].tot[1]+e[rs].tot[1];
  22. e[rt].pingfang=e[ls].pingfang+e[rs].pingfang;
  23. e[rt].chengji=e[ls].chengji+e[rs].chengji;
  24. }
  25. ll calc(int x) {return (ll)x*(x+1)/2;};
  26. ll calc2(int x) {return (ll)x*(x+1)/2*(2*x+1)/3;};
  27. void pushdown(int rt) {
  28. if(e[rt].lazy) {
  29. e[ls].tot[0]=e[ls].tot[1]=calc(e[ls].r)-calc(e[ls].l-1);
  30. e[ls].pingfang=e[ls].chengji=calc2(e[ls].r)-calc2(e[ls].l-1);
  31. e[ls].S=e[ls].T=0;
  32. e[ls].lazy=1;
  33. e[rs].tot[0]=e[rs].tot[1]=calc(e[rs].r)-calc(e[rs].l-1);
  34. e[rs].pingfang=e[rs].chengji=calc2(e[rs].r)-calc2(e[rs].l-1);
  35. e[rs].S=e[rs].T=0;
  36. e[rs].lazy=1;
  37. e[rt].lazy=0;
  38. }
  39. if(e[rt].S||e[rt].T) {
  40. e[ls].chengji+=e[ls].tot[0]*e[rt].T+e[ls].tot[1]*e[rt].S+e[rt].S*e[rt].T*e[ls].siz;
  41. e[ls].pingfang+=e[ls].tot[0]*2*e[rt].S+e[rt].S*e[rt].S*e[ls].siz;
  42. e[ls].tot[0]+=e[ls].siz*e[rt].S;
  43. e[ls].tot[1]+=e[ls].siz*e[rt].T;
  44. e[ls].S+=e[rt].S;
  45. e[ls].T+=e[rt].T;
  46. e[rs].chengji+=e[rs].tot[0]*e[rt].T+e[rs].tot[1]*e[rt].S+e[rt].S*e[rt].T*e[rs].siz;
  47. e[rs].pingfang+=e[rs].tot[0]*2*e[rt].S+e[rt].S*e[rt].S*e[rs].siz;
  48. e[rs].tot[0]+=e[rs].siz*e[rt].S;
  49. e[rs].tot[1]+=e[rs].siz*e[rt].T;
  50. e[rs].S+=e[rt].S;
  51. e[rs].T+=e[rt].T;
  52. e[rt].S=e[rt].T=0;
  53. }
  54. }
  55. void build(int l,int r,int rt) {
  56. e[rt].l=l,e[rt].r=r,e[rt].siz=r-l+1;
  57. if(l==r) {
  58. e[rt].tot[0]=x[l];
  59. e[rt].tot[1]=y[l];
  60. e[rt].pingfang=x[l]*x[l];
  61. e[rt].chengji=x[l]*y[l];
  62. return;
  63. }
  64. int mid=(l+r)>>1;
  65. build(l,mid,ls);
  66. build(mid+1,r,rs);
  67. pushup(rt);
  68. }
  69. void modify_1(int L,int R,ll S,ll T,int rt) {
  70. if(L<=e[rt].l&&e[rt].r<=R) {
  71. e[rt].chengji+=e[rt].tot[0]*T+e[rt].tot[1]*S+S*T*e[rt].siz;
  72. e[rt].pingfang+=e[rt].tot[0]*2*S+S*S*e[rt].siz;
  73. e[rt].tot[0]+=e[rt].siz*S;
  74. e[rt].tot[1]+=e[rt].siz*T;
  75. e[rt].S+=S;
  76. e[rt].T+=T;
  77. return;
  78. }
  79. pushdown(rt);
  80. int mid=(e[rt].l+e[rt].r)>>1;
  81. if(L<=mid) modify_1(L,R,S,T,ls);
  82. if(R>mid) modify_1(L,R,S,T,rs);
  83. pushup(rt);
  84. }
  85. void modify_2(int L,int R,int rt) {
  86. if(L<=e[rt].l&&e[rt].r<=R) {
  87. e[rt].tot[0]=e[rt].tot[1]=calc(e[rt].r)-calc(e[rt].l-1);
  88. e[rt].pingfang=e[rt].chengji=calc2(e[rt].r)-calc2(e[rt].l-1);
  89. e[rt].S=e[rt].T=0;
  90. e[rt].lazy=1;
  91. return;
  92. }
  93. pushdown(rt);
  94. int mid=(e[rt].l+e[rt].r)>>1;
  95. if(L<=mid) modify_2(L,R,ls);
  96. if(R>mid) modify_2(L,R,rs);
  97. pushup(rt);
  98. }
  99. ll query(int L,int R,int opt,int rt) {
  100. if(L<=e[rt].l&&e[rt].r<=R) {
  101. if(opt==0) return e[rt].tot[0];
  102. if(opt==1) return e[rt].tot[1];
  103. if(opt==2) return e[rt].pingfang;
  104. if(opt==3) return e[rt].chengji;
  105. }
  106. pushdown(rt);
  107. int mid=(e[rt].l+e[rt].r)>>1;
  108. ll ans=0;
  109. if(L<=mid) ans+=query(L,R,opt,ls);
  110. if(R>mid) ans+=query(L,R,opt,rs);
  111. pushup(rt);
  112. return ans;
  113. }
  114. int main() {
  115. int n=read(),m=read();
  116. for(int i=1;i<=n;++i) x[i]=read();
  117. for(int i=1;i<=n;++i) y[i]=read();
  118. build(1,n,1);
  119. while(m--) {
  120. int opt=read(),L=read(),R=read();
  121. if(opt==1) {
  122. ll tot_x=query(L,R,0,1);
  123. ll tot_y=query(L,R,1,1);
  124. ll tot_x_x=query(L,R,2,1);
  125. ll tot_x_y=query(L,R,3,1);
  126. long double a=tot_x_y-tot_x*tot_y/(R-L+1);
  127. long double b=tot_x_x-tot_x*tot_x/(R-L+1);
  128. printf("%.10Lf\n",(long double)a/b);
  129. } else if(opt==2) {
  130. ll S=read(),T=read();
  131. modify_1(L,R,(ll)S,(ll)T,1);
  132. } else {
  133. ll S=read(),T=read();
  134. modify_2(L,R,1);
  135. modify_1(L,R,(ll)S,(ll)T,1);
  136. }
  137. }
  138. return 0;
  139. }

SDOI2017相关分析 线段树的更多相关文章

  1. [Sdoi2017]相关分析 [线段树]

    [Sdoi2017]相关分析 题意:沙茶线段树 md其实我考场上还剩一个多小时写了40分 其实当时写正解也可以吧1h也就写完了不过还要拍一下 正解代码比40分短2333 #include <io ...

  2. 【BZOJ4821】[Sdoi2017]相关分析 线段树

    [BZOJ4821][Sdoi2017]相关分析 Description Frank对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. ...

  3. BZOJ 4821 [Sdoi2017]相关分析 ——线段树

    打开题面,看到许多$\sum$ woc,好神啊,SDOI好强啊 然后展开之后,woc,SDOI好弱啊,怎么T3出个线段树裸题啊. 最后写代码的时候,woc,SDOI怎么出个这么码农的题啊,怎么调啊. ...

  4. 洛谷P3707 [SDOI2017]相关分析(线段树)

    题目描述 Frank对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. Frank不仅喜欢观测,还喜欢分析观测到的数据.他经常分析两个 ...

  5. BZOJ 4821: [Sdoi2017]相关分析 线段树 + 卡精

    考试的时候切掉了,然而卡精 + 有一个地方忘开 $long long$,完美挂掉 $50$pts. 把式子化简一下,然后直接拿线段树来维护即可. Code: // luogu-judger-enabl ...

  6. BZOJ.4821.[SDOI2017]相关分析(线段树)

    BZOJ LOJ 洛谷 恶心的拆式子..然后就是要维护\(\sum x_i,\ \sum y_i,\ \sum x_iy_i,\ \sum x_i^2\). 操作三可以看成初始化一遍,然后同操作二. ...

  7. 【BZOJ4821】【SDOI2017】相关分析 [线段树]

    相关分析 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Frank对天文学非常感兴趣,他经 ...

  8. luogu3707 相关分析 (线段树)

    把式子展开以后会发现,可以用线段树维护$x,y,x*y,x^2$分别的区间和 然后操作有区间加和区间修改 这个pushdown的时候,如果改和加的标记同时存在,那一定是先改再加,要不然加的标记已经被清 ...

  9. LOJ #2005. 「SDOI2017」相关分析 线段树维护回归直线方程

    题目描述 \(Frank\) 对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. \(Frank\) 不仅喜欢观测,还喜欢分析观测到的 ...

随机推荐

  1. 常见web错误码

    404表示文件或资源未找到 java WEB常见的错误代码 .1xx-信息提示:这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应. -继续. -切换协议. .2xx ...

  2. python3 TypeError: a bytes-like object is required, not 'str'

    在学习<Python web开发学习实录>时, 例11-1: # !/usr/bin/env python # coding=utf-8 import socket sock = sock ...

  3. Life Winner Bo (博弈论)

    kind:维持让对手处于(奇数,奇数)的状态,就能赢. rook:维持让对手处于(A,A)相等的状态,就能赢. knight:画图找规律,没有到达终点的就是平局. queen:威佐夫博弈论,终点不一样 ...

  4. win10 在任务栏添加 desktop 快捷图标

    http://www.xitongcheng.com/jiaocheng/win10_article_11980.html [Shell] Command= IconFile=explorer.exe ...

  5. 按渠道计算 PV 和 UV

    按渠道计算 PV 和 UV: ------------------按指定channel_id按月求PV.UV------------ drop table if exists tmp_pvuv; cr ...

  6. loadRunner回访脚本时报Error -27987: Requested image not found [MsgId: MERR-27987]

    loadRunner录制:登陆订机票网址->订机票的过程 loadRunner回访脚本时报Error -27987: Requested image not found  [MsgId: MER ...

  7. python遍历目录os.walk(''d:\\test2",topdown=False)

    os.walk(top, topdown=True, onerror=None, followlinks=False)遍历目录,topdown=false表示先返回目录,后返回文件 参数说明: top ...

  8. C#发送邮件异常:根据验证过程,远程证书无效,何解???

    /// <summary> /// 发送邮件 /// </summary> /// <param name="mailSubjct">邮件主题& ...

  9. The Little Prince-12/02

    The Little Prince-12/02 What moves me so deeply, about this little prince who is sleeping here, is h ...

  10. plsql登录报错身份证明检索失败

    找到sqlnet.ora文件  在Oracle安装目录下    \product\12.2.0\dbhome_1\network\admin 把     SQLNET.AUTHENTICATION_S ...