P3707 [SDOI2017]相关分析


线段树裸题?但是真的很麻烦QAQ

题目给的式子是什么不用管,大力拆开,就是\(\frac{\sum x_iy_i-\overline xy_i-\overline yx_i+\overline x\overline y}{\sum x_i^2-2x_i\overline x+\overline x^2}\)

然后发现需要维护\(\sum x,\sum y,\sum xy,\sum x^2\)

剩下的就是维护两个标记,具体自己推吧,懒得写了,看代码,咕咕咕咕

  1. #include<bits/stdc++.h>
  2. #define il inline
  3. #define vd void
  4. #define rg register
  5. typedef long long ll;
  6. il int gi(){
  7. int x=0,f=1;
  8. char ch=getchar();
  9. while(!isdigit(ch)){
  10. if(ch=='-')f=-1;
  11. ch=getchar();
  12. }
  13. while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
  14. return x*f;
  15. }
  16. struct data{double xy,x,y,x2;}s[400010];
  17. il data operator +(const data&a,const data&b){return(data){a.xy+b.xy,a.x+b.x,a.y+b.y,a.x2+b.x2};}
  18. bool lz0[400010],lz1[400010];
  19. double lz0x[400010],lz0y[400010];
  20. double lz1x[400010],lz1y[400010];
  21. #define mid ((l+r)>>1)
  22. il double ssum(int x){return 0.50*x*(x+1);}
  23. il double ssqr(int x){return 1.00/6*x*(x+1)*(x*2+1);}
  24. il vd Overwrite(int x,int l,int r,double x0,double y0){
  25. lz1[x]=1,lz0[x]=0;lz1x[x]=x0,lz1y[x]=y0;
  26. s[x]=(data){x0*y0*(r-l+1)+(x0+y0)*ssum(r-l+1)+ssqr(r-l+1),x0*(r-l+1)+ssum(r-l+1),y0*(r-l+1)+ssum(r-l+1),x0*x0*(r-l+1)+ssqr(r-l+1)+ssum(r-l+1)*x0*2};
  27. }
  28. il vd Modify(int x,int l,int r,double x1,double y1){
  29. if(!lz0[x])lz0[x]=1,lz0x[x]=lz0y[x]=0;lz0x[x]+=x1,lz0y[x]+=y1;
  30. s[x]=s[x]+(data){s[x].x*y1+s[x].y*x1+x1*y1*(r-l+1),(r-l+1)*x1,(r-l+1)*y1,s[x].x*x1*2+x1*x1*(r-l+1)};
  31. }
  32. il vd down(int x,int l,int r){
  33. if(lz1[x])Overwrite(x<<1,l,mid,lz1x[x],lz1y[x]),Overwrite(x<<1|1,mid+1,r,lz1x[x]+(mid-l+1),lz1y[x]+(mid-l+1)),lz1[x]=0;
  34. if(lz0[x])Modify(x<<1,l,mid,lz0x[x],lz0y[x]),Modify(x<<1|1,mid+1,r,lz0x[x],lz0y[x]),lz0[x]=0;
  35. }
  36. double X[100010],Y[100010];
  37. il vd build(int x,int l,int r){
  38. if(l==r){s[x]=(data){X[l]*Y[l],X[l],Y[l],X[l]*X[l]};return;}
  39. build(x<<1,l,mid),build(x<<1|1,mid+1,r);
  40. s[x]=s[x<<1]+s[x<<1|1];
  41. }
  42. il vd update_M(int x,int l,int r,const int&L,const int&R,const double&x0,const double&y0){
  43. if(L<=l&&r<=R)return Modify(x,l,r,x0,y0);
  44. down(x,l,r);
  45. if(L<=mid)update_M(x<<1,l,mid,L,R,x0,y0);
  46. if(mid<R)update_M(x<<1|1,mid+1,r,L,R,x0,y0);
  47. s[x]=s[x<<1]+s[x<<1|1];
  48. }
  49. il vd update_O(int x,int l,int r,const int&L,const int&R,const double&x0,const double&y0){
  50. if(L<=l&&r<=R)return Overwrite(x,l,r,x0,y0);
  51. down(x,l,r);
  52. if(L<=mid){
  53. update_O(x<<1,l,mid,L,R,x0,y0);
  54. if(mid<R)update_O(x<<1|1,mid+1,r,L,R,x0+(mid-std::max(l,L)+1),y0+(mid-std::max(l,L)+1));
  55. }else update_O(x<<1|1,mid+1,r,L,R,x0,y0);
  56. s[x]=s[x<<1]+s[x<<1|1];
  57. }
  58. il data query(int x,int l,int r,const int&L,const int&R){
  59. if(L<=l&&r<=R)return s[x];
  60. down(x,l,r);
  61. if(L<=mid)
  62. if(mid<R)return query(x<<1,l,mid,L,R)+query(x<<1|1,mid+1,r,L,R);
  63. else return query(x<<1,l,mid,L,R);
  64. else return query(x<<1|1,mid+1,r,L,R);
  65. }
  66. int main(){
  67. #ifndef ONLINE_JUDGE
  68. freopen("3707.in","r",stdin);
  69. freopen("3707.out","w",stdout);
  70. #endif
  71. int n=gi(),m=gi();
  72. for(rg int i=1;i<=n;++i)X[i]=gi();
  73. for(rg int i=1;i<=n;++i)Y[i]=gi();
  74. build(1,1,n);
  75. int o,l,r;double S,T;
  76. while(m--){
  77. o=gi();l=gi(),r=gi();
  78. if(o==1){
  79. data D=query(1,1,n,l,r);
  80. rg double px=D.x/(r-l+1),py=D.y/(r-l+1);
  81. printf("%.10lf\n",(D.xy-px*D.y-py*D.x+px*py*(r-l+1))/(D.x2-2*px*D.x+px*px*(r-l+1)));
  82. }else{
  83. S=gi(),T=gi();
  84. if(o==2)update_M(1,1,n,l,r,S,T);
  85. else update_O(1,1,n,l,r,S+l-1,T+l-1);
  86. }
  87. }
  88. return 0;
  89. }

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

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

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

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

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

  3. luogu P3707 [SDOI2017]相关分析

    传送门 对于题目要求的东西,考虑拆开懒得拆了 ,可以发现有\(\sum x\sum y\sum x^2\sum xy\)四个变量影响最终结果,考虑维护这些值 下面记\(l,r\)为区间两端点 首先是区 ...

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

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

  5. BZOJ4817 SDOI2017 相关分析

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

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

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

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

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

  8. [Luogu 3707] SDOI2017 相关分析

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

  9. 4821: [Sdoi2017]相关分析

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

随机推荐

  1. Error loading XML document: dwz.frag.xml 处理方式

    问题:直接用IE打开index.html弹出一个对话框:Error loading XML document: dwz.frag.xml 方案一(已经验证): 转自:http://blog.csdn. ...

  2. playfair

    又是一道实验吧的题,哈哈,我比较弱. 因为题目写了play我首先想到的是playfair,好,下面先看下百科 好了,已知了密钥: 所以有: s n f m th b g o ui c j p vy d ...

  3. 11g数据库查看dataguard是否同步

    一.环境      主库:       ip地址:192.168.122.203       oracle根目录:/data/db/oracle       SID:qyq       数据文件路径/ ...

  4. Alpha 冲刺报告(10/10)

    Alpha 冲刺报告(10/10) 队名:洛基小队 峻雄(组长) 已完成:阿尔法版的ppt 明日计划:总结阿尔法版的问题 剩余任务:角色属性脚本的完整版本 困难:缺乏编码经验,编码进度比较慢 ---- ...

  5. Spring读取资源的接口Resource笔记

    这个是Resource接口的继承体系图.这个接口就是一个资源描述符,抽象的描述了类路径下或者是文件系统中的文件.比如一个Resource接口的实现类的一个实例就代表一个的资源,比如用一个Resourc ...

  6. git使用,在ubuntu中

    #安装sudo apt install git要先到github官网建一个账号. #配置 你的github git config --global user.name "fanbrightu ...

  7. CentOS 7.4 yum安装LAMP环境

    配置防火墙,开启80.3306端口.CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. #停止firewall服务 systemctl stop firewa ...

  8. _viewstart.cshtml的作用

    在ASP.NET MVC 3.0及更高版本中,用Razor模板引擎新建项目后,Views目录下会出现一个这样的文件:_ViewStart.cshtml. _viewstart.cshtml的作用 1. ...

  9. virtualbox+vagrant学习-3-Vagrant Share-4-Vagrant Connect

    Vagrant Connect vagrant可以共享到vagrant环境的任何或每个端口,而不仅仅是SSH和HTTP.“vagrant connect”命令为连接人员提供一个静态IP,他们可以使用该 ...

  10. github与git基本操作(一)

    一.git上传本地项目到github 前提:github创建一个空仓库(得到“https://自己的仓库url地址”)1.第一步:就是要进入这个目录下,cmd2.第二步:输入git init3.第三步 ...