传送门

对于题目要求的东西,考虑拆开懒得拆了 ,可以发现有\(\sum x\sum y\sum x^2\sum xy\)四个变量影响最终结果,考虑维护这些值

下面记\(l,r\)为区间两端点

首先是区间加操作,可以这样维护$$\sum(x+s)=\sum x+(r-l+1)s$$$$\sum(y+s)=\sum y+(r-l+1)s$$$$\sum(x+s)^2=\sum x^2+2s\sum x+(r-l+1)s^2$$$$\sum(x+s)(y+t)=\sum xy+s\sum y+t\sum x+(r-l+1)st$$

然后是区间修改,区间修改可以看做先把所有\(x_i,y_i\)变成\(i\),然后再是区间加\((s,t)\)的操作,至于修改的话,用上平方和公式就很吼辣\(\sum_{i=1}^n i^2=\frac{n(n+1)(2n+1)}{6}\)

于是会修改成这样$$\sum x=\sum y=(r-l+1)(l+r)/2$$$$\sum x^2=\sum xy=\sum_{i=1}^r i2-\sum_{i=1}{l-1} i^2$$

然后求出询问区间的上述四个值,代入你所求的公式就行了

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. #define il inline
  4. #define re register
  5. #define db double
  6. #define eps (1e-5)
  7. using namespace std;
  8. const int N=120000+10;
  9. il LL rd()
  10. {
  11. LL x=0,w=1;char ch=0;
  12. while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
  13. while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
  14. return x*w;
  15. }
  16. struct node
  17. {
  18. db x,y,xx,xy;
  19. node(){x=y=xx=xy=0;}
  20. node operator + (const node &b) const
  21. {
  22. node an,a=*this;
  23. an.x=a.x+b.x,an.y=a.y+b.y,an.xx=a.xx+b.xx,an.xy=a.xy+b.xy;
  24. return an;
  25. }
  26. }tr[N<<2],nw;
  27. db lz[N<<2][3],aa[N][2];
  28. int n,m;
  29. #define lc (o<<1)
  30. #define rc ((o<<1)|1)
  31. #define mid ((l+r)>>1)
  32. il db sgmn2(db n){return n*(n+1)*(2*n+1)/6;}
  33. il void ad(int o,int l,int r,db s,db t)
  34. {
  35. db len=r-l+1;
  36. tr[o].xx+=s*tr[o].x*2+s*s*len;
  37. tr[o].xy+=s*tr[o].y+t*tr[o].x+s*t*len;
  38. tr[o].x+=len*s;
  39. tr[o].y+=len*t;
  40. lz[o][1]+=s,lz[o][2]+=t;
  41. }
  42. il void cg(int o,int l,int r)
  43. {
  44. db len=r-l+1;
  45. lz[o][1]=lz[o][2]=0;
  46. tr[o].x=tr[o].y=len*(db)(l+r)/2.0;
  47. tr[o].xx=tr[o].xy=sgmn2(r)-sgmn2(l-1);
  48. lz[o][0]=1;
  49. }
  50. il void psdn(int o,int l,int r)
  51. {
  52. if(lz[o][0]) cg(lc,l,mid),cg(rc,mid+1,r);
  53. ad(lc,l,mid,lz[o][1],lz[o][2]),ad(rc,mid+1,r,lz[o][1],lz[o][2]);
  54. lz[o][0]=lz[o][1]=lz[o][2]=0;
  55. }
  56. void bui(int o,int l,int r)
  57. {
  58. if(l==r){tr[o].x=aa[l][0],tr[o].y=aa[l][1],tr[o].xx=tr[o].x*tr[o].x,tr[o].xy=tr[o].x*tr[o].y;return;}
  59. bui(lc,l,mid),bui(rc,mid+1,r);
  60. tr[o]=tr[lc]+tr[rc];
  61. }
  62. void modif1(int o,int l,int r,int ll,int rr,db s,db t)
  63. {
  64. if(ll<=l&&r<=rr)
  65. {
  66. ad(o,l,r,s,t);
  67. //psdn(o,l,r);
  68. return;
  69. }
  70. psdn(o,l,r);
  71. if(ll<=mid) modif1(lc,l,mid,ll,rr,s,t);
  72. if(rr>mid) modif1(rc,mid+1,r,ll,rr,s,t);
  73. tr[o]=tr[lc]+tr[rc];
  74. }
  75. void modif2(int o,int l,int r,int ll,int rr,db s,db t)
  76. {
  77. if(ll<=l&&r<=rr)
  78. {
  79. cg(o,l,r);ad(o,l,r,s,t);
  80. //psdn(o,l,r);
  81. return;
  82. }
  83. psdn(o,l,r);
  84. if(ll<=mid) modif2(lc,l,mid,ll,rr,s,t);
  85. if(rr>mid) modif2(rc,mid+1,r,ll,rr,s,t);
  86. tr[o]=tr[lc]+tr[rc];
  87. }
  88. node quer(int o,int l,int r,int ll,int rr)
  89. {
  90. if(ll<=l&&r<=rr) return tr[o];
  91. psdn(o,l,r);
  92. node an;
  93. if(ll<=mid) an=an+quer(lc,l,mid,ll,rr);
  94. if(rr>mid) an=an+quer(rc,mid+1,r,ll,rr);
  95. tr[o]=tr[lc]+tr[rc];
  96. return an;
  97. }
  98. int main()
  99. {
  100. n=rd(),m=rd();
  101. for(int i=1;i<=n;i++) aa[i][0]=rd();
  102. for(int i=1;i<=n;i++) aa[i][1]=rd();
  103. bui(1,1,n);
  104. while(m--)
  105. {
  106. int op=rd(),l=rd(),r=rd();
  107. if(op==1)
  108. {
  109. nw=quer(1,1,n,l,r);
  110. db len=r-l+1,gx=nw.x/len,gy=nw.y/len;
  111. printf("%.6lf\n",(nw.xy-gx*nw.y-gy*nw.x+gx*gy*len)/(nw.xx-2*gx*nw.x+gx*gx*len));
  112. }
  113. else if(op==2)
  114. {
  115. db s=rd(),t=rd();
  116. modif1(1,1,n,l,r,s,t);
  117. }
  118. else
  119. {
  120. db s=rd(),t=rd();
  121. modif2(1,1,n,l,r,s,t);
  122. }
  123. }
  124. return 0;
  125. }

luogu P3707 [SDOI2017]相关分析的更多相关文章

  1. [题目] Luogu P3707 [SDOI2017]相关分析

    参考资料:[Luogu 3707] SDOI2017 相关分析 P3707 [SDOI2017]相关分析 TFRAC FRAC DFRAC \(\tfrac{\sum}{1}\) \(\frac{\s ...

  2. [Luogu 3707] SDOI2017 相关分析

    [Luogu 3707] SDOI2017 相关分析 前言 Capella 和 Frank 一样爱好天文学. 她常在冬季的夜晚,若有所思地望着东北方上空的五边形中,最为耀眼的一个顶点. 那一抹金黄曾带 ...

  3. P3707 [SDOI2017]相关分析

    P3707 [SDOI2017]相关分析 线段树裸题?但是真的很麻烦QAQ 题目给的式子是什么不用管,大力拆开,就是\(\frac{\sum x_iy_i-\overline xy_i-\overli ...

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

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

  5. AC日记——[SDOI2017]相关分析 洛谷 P3707

    [SDOI2017]相关分析 思路: 裸线段树: (玄学ac): 代码: #include <bits/stdc++.h> using namespace std; #define max ...

  6. BZOJ4817 SDOI2017 相关分析

    4821: [Sdoi2017]相关分析 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge Description Frank对天文 ...

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

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

  8. 【BZOJ4821】[SDOI2017]相关分析(线段树)

    [BZOJ4821][SDOI2017]相关分析(线段树) 题面 BZOJ 洛谷 题解 看看询问要求的东西是什么.把所有的括号拆开,不难发现要求的就是\(\sum x,\sum y,\sum xy,\ ...

  9. 4821: [Sdoi2017]相关分析

    4821: [Sdoi2017]相关分析 链接 分析: 大力拆式子,化简,然后线段树.注意精度问题与爆longlong问题. 代码: #include<cstdio> #include&l ...

随机推荐

  1. js對象構造

    創建對象的3種方式: 1. var a=new Object() a.attributes=“1”: 2. var a={attributes:"1",aa:"2&quo ...

  2. js脚本 将本地图片路径转换为html

    公司业务类似于电商, 因此有很多纯图片展示的商品详情页, 类似淘宝店商品页面下的多个图片组成的商品详情页, 页面很简单, 就是一大串img标签, 但是每次做详情页都要配合emmet一顿操作( 如下图 ...

  3. StringBuilder String string.Concat 字符串拼接速度再议

    首先看测试代码: public class StringSpeedTest { "; public string StringAdd(int count) { string str = st ...

  4. Lucene 分析的意思是按照某种规则进行内容拆分 支持模糊搜索

    Lucene 分析的意思是按照某种规则进行内容拆分 里面的域的值是拆分后的内容

  5. BZOJ4652 NOI2016循环之美(莫比乌斯反演+杜教筛)

    因为要求数值不同,不妨设gcd(x,y)=1.由提示可以知道,x/y是纯循环小数的充要条件是x·klen=x(mod y).因为x和y互质,两边同除x,得klen=1(mod y).那么当且仅当k和y ...

  6. Internet Explorer 10 administration IE10管理

    http://4sysops.com/archives/internet-explorer-10-administration-part-1-overview/ http://4sysops.com/ ...

  7. luogu3320 寻宝游戏 (dfs序+倍增lca+set)

    一定是从随便某个点开始,然后按着dfs序的顺序跑一圈是最好的 所以说,新加一个点x,就减少了dis(pre,next),增加了dis(pre,x),dis(x,nxt) 删掉一个点同理 这个可以用se ...

  8. python assert用法

    使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单.在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件 ...

  9. qq空间爬取

    QQ_spider github传送门 QQ空间spider总结 花了将近3天吧,完成了低配版qq空间的爬虫,终于能上线刚一波了,还是蛮期待的. 流程很简单,模拟登录 ==>采集==>保存 ...

  10. 单片机I/O口的结构的详解

    1.什么是源型 漏型?什么是上拉电阻?下拉电阻?什么是 线驱动输出 集电极开路输出,推挽式输出? 我们先来说说集电极开路输出的结构.集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所 ...