打开题面,看到许多$\sum$

woc,好神啊,SDOI好强啊

然后展开之后,woc,SDOI好弱啊,怎么T3出个线段树裸题啊。

最后写代码的时候,woc,SDOI怎么出个这么码农的题啊,怎么调啊。

想想自己加上考场$Debuff$是肯定写不出来的。

  1. #include <map>
  2. #include <cmath>
  3. #include <queue>
  4. #include <cstdio>
  5. #include <cstring>
  6. #include <iostream>
  7. #include <algorithm>
  8. using namespace std;
  9. #define F(i,j,k) for (int i=j;i<=k;++i)
  10. #define D(i,j,k) for (int i=j;i>=k;--i)
  11. //#define double long double
  12. #define ll long long
  13. #define mp make_pair
  14. #define maxn 400005
  15.  
  16. #define sum(x) (1LL*(x)*((x)+1)/2)
  17. #define sum2(x) (1LL*(x)*((x)+1)*(2*(x)+1)/6)
  18.  
  19. double sum_x[maxn],sum_y[maxn],sum_xy[maxn],sum_xx[maxn];
  20. double tag_x[maxn],tag_y[maxn];
  21. bool tag_c[maxn];
  22. int x[maxn],y[maxn];
  23. double sumx,sumy,sumxy,sumxx;
  24.  
  25. int n,m;
  26.  
  27. void update(int o,int l,int r)
  28. {
  29. sum_x[o]=sum_x[o<<1]+sum_x[o<<1|1];
  30. sum_y[o]=sum_y[o<<1]+sum_y[o<<1|1];
  31. sum_xy[o]=sum_xy[o<<1]+sum_xy[o<<1|1];
  32. sum_xx[o]=sum_xx[o<<1]+sum_xx[o<<1|1];
  33. }
  34.  
  35. void add_tag_x(int o,int l,int r,double s)
  36. {
  37. tag_x[o]+=s;
  38. sum_xx[o]+=1LL*s*s*(r-l+1)+2*s*sum_x[o];
  39. sum_xy[o]+=1LL*sum_y[o]*s;
  40. sum_x[o]+=1LL*(r-l+1)*s;
  41. }
  42.  
  43. void add_tag_y(int o,int l,int r,double t)
  44. {
  45. tag_y[o]+=t;
  46. sum_xy[o]+=1LL*sum_x[o]*t;
  47. sum_y[o]+=1LL*(r-l+1)*t;
  48. }
  49.  
  50. void add_cov(int o,int l,int r)
  51. {
  52. sum_y[o]=sum_x[o]=sum(r)-sum(l-1);
  53. sum_xy[o]=sum_xx[o]=sum2(r)-sum2(l-1);
  54. tag_x[o]=tag_y[o]=0; tag_c[o]=true;
  55. }
  56.  
  57. void pushdown(int o,int l,int r)
  58. {
  59. if (o==0||l==r) return;
  60. int mid=l+r>>1;
  61. if (tag_c[o])
  62. {
  63. add_cov(o<<1,l,mid);
  64. add_cov(o<<1|1,mid+1,r);
  65. tag_c[o]=false;
  66. }
  67. if (tag_x[o])
  68. {
  69. add_tag_x(o<<1,l,mid,tag_x[o]);
  70. add_tag_x(o<<1|1,mid+1,r,tag_x[o]);
  71. tag_x[o]=0;
  72. }
  73. if (tag_y[o])
  74. {
  75. add_tag_y(o<<1,l,mid,tag_y[o]);
  76. add_tag_y(o<<1|1,mid+1,r,tag_y[o]);
  77. tag_y[o]=0;
  78. }
  79. }
  80.  
  81. void st_modify(int o,int l,int r,int L,int R,double s,double t)
  82. {
  83. if (L<=l&&r<=R){add_tag_x(o,l,r,s);add_tag_y(o,l,r,t);return;}
  84. int mid=l+r>>1; pushdown(o,l,r);
  85. if (L<=mid) st_modify(o<<1,l,mid,L,R,s,t);
  86. if (R>mid) st_modify(o<<1|1,mid+1,r,L,R,s,t);
  87. update(o,l,r);
  88. }
  89.  
  90. void modify(int l,int r,double s,double t)
  91. {st_modify(1,1,n,l,r,s,t);}
  92.  
  93. void st_cov(int o,int l,int r,int L,int R)
  94. {
  95. if (L<=l&&r<=R){add_cov(o,l,r);return;}
  96. int mid=l+r>>1; pushdown(o,l,r);
  97. if (L<=mid) st_cov(o<<1,l,mid,L,R);
  98. if (R>mid) st_cov(o<<1|1,mid+1,r,L,R);
  99. update(o,l,r);
  100. }
  101.  
  102. void cover(int l,int r)
  103. {st_cov(1,1,n,l,r);}
  104.  
  105. void st_query(int o,int l,int r,int L,int R)
  106. {
  107. if (L<=l&&r<=R){sumx+=sum_x[o],sumy+=sum_y[o],sumxx+=sum_xx[o];sumxy+=sum_xy[o];return;}
  108. int mid=l+r>>1; pushdown(o,l,r);
  109. if (R<=mid) st_query(o<<1,l,mid,L,R);
  110. else if (L>mid) st_query(o<<1|1,mid+1,r,L,R);
  111. else st_query(o<<1,l,mid,L,R),st_query(o<<1|1,mid+1,r,L,R);
  112. }
  113.  
  114. double query(int l,int r)
  115. {
  116. sumx=0; sumy=0;sumxx=0; sumxy=0;
  117. double len=r-l+1; st_query(1,1,n,l,r);
  118. printf("%.10lf\n",(len*sumxy-sumx*sumy)/(len*sumxx-sumx*sumx));
  119. }
  120.  
  121. void build(int o,int l,int r)
  122. {
  123. if (l==r)
  124. {
  125. sum_x[o]=x[l]; sum_y[o]=y[l];
  126. sum_xy[o]=1LL*x[l]*y[l]; sum_xx[o]=1LL*x[l]*x[l];
  127. return ;
  128. }
  129. int mid=l+r>>1;
  130. build(o<<1,l,mid);
  131. build(o<<1|1,mid+1,r);
  132. update(o,l,r);
  133. }
  134.  
  135. int main()
  136. {
  137. scanf("%d%d",&n,&m);
  138. F(i,1,n) scanf("%d",&x[i]);
  139. F(i,1,n) scanf("%d",&y[i]);
  140. build(1,1,n);
  141. F(i,1,m)
  142. {
  143. int opt,l,r,s,t;
  144. scanf("%d",&opt);
  145. switch(opt)
  146. {
  147. case 1:
  148. scanf("%d%d",&l,&r);
  149. query(l,r);
  150. break;
  151. case 2:
  152. scanf("%d%d%d%d",&l,&r,&s,&t);
  153. modify(l,r,(double)s,(double)t);
  154. break;
  155. case 3:
  156. scanf("%d%d%d%d",&l,&r,&s,&t);
  157. cover(l,r);
  158. modify(l,r,(double)s,(double)t);
  159. }
  160. }
  161. }

  

BZOJ 4821 [Sdoi2017]相关分析 ——线段树的更多相关文章

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

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

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

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

  3. (WA)BZOJ 4821: [Sdoi2017]相关分析

    二次联通门 : BZOJ 4821: [Sdoi2017]相关分析 2017.8.23 Updata 妈妈!!这道题卡我!!!就是不然我过!!!!! #include <cstdio> # ...

  4. ●BZOJ 4821 [Sdoi2017]相关分析

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4821 题解: 线段树是真的恶心,(也许是我的方法麻烦了一些吧)首先那个式子可以做如下化简: ...

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

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

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

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

  7. bzoj 4821 [Sdoi2017]相关分析

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4821 题解 做法显然 就是维护一颗线段树 里面装4个东西 区间x的和 区间y的和 区间$x^ ...

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

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

  9. SDOI2017相关分析 线段树

    题目 https://loj.ac/problem/2005 思路 \[ \sum_{L}^{R}{(x_i-x)^{2}} \] \[ \sum_{L}^{R}{(x_i^2-2*x_i*x+x^{ ...

随机推荐

  1. 弄了一个星期的wp 8.1,吐血的感觉

    看到8.1出来这么久了,心痒难耐,忍不住想重新把应用写一遍,于是上个星期开始动手,用的mvvm模式,结果一路下来,sqlce不能用了,那好吧,我用sqlite,webrequest变成httpclie ...

  2. Python 消息框的处理

    在实际系统中,在完成某些操作时会弹出对话框来提示,主要分为"警告消息框","确认消息框","提示消息对话"三种类型的对话框. 1.警告消息框 ...

  3. Python——流程控制语句

    if语句 条件进行判断,满足,则执行里面 的内容:不满足,则执行if循环下面的语句 基本语法: if 判断条件: 满足后执行语句 1 如果:女人的年龄>30岁,那么:叫阿姨 age_of_gir ...

  4. Dede技巧

    解决DEDE图集上传图片时跳出302错误   本地上传图集的时候突然提示网页出错,还爆出302错误. 解决办法是在include/userlogin.class.php文件中的第二行session_s ...

  5. SpringBoot(一)_Eclipse的安装和使用

    1.Eclipse中安装STS插件: Help -> Eclipse Marketplace… Search或选择“Popular”标签,选择Spring Tool Suite (STS) fo ...

  6. c++作业:求N的阶乘。

    N的阶乘就是n.(n-1)! 5的阶乘是什么?5*4*3*2*1 #include <iostream> using namespace std; int jiecheng(int num ...

  7. OC和C++的区别

    C++语言特点: 1.在C语言的基础上进行扩充和完善,使C++兼容了C语言的面向过程特点,又成为了一种面向对象的程序设计语言: 2.可以使用抽象数据类型进行基于对象的编程: 3.可以使用多继承.多态进 ...

  8. 学习笔记(四): Representation:Feature Engineering/Qualities of Good Features/Cleaning Data/Feature Sets

    目录 Representation Feature Engineering Mapping Raw Data to Features Mapping numeric values Mapping ca ...

  9. NOIP模拟赛 czy的后宫5

    描述 czy要召集他的妹子,但是由于条件有限,可能每个妹子不能都去,但每个妹子都有一个美丽值,czy希望来的妹子们的美丽值总和最大(虽然……). czy有一个周密的电话通知网络,它其实就是一棵树,根结 ...

  10. NOIP模拟赛 数列

    Problem 2 数列(seq.cpp/c/pas) [题目描述] a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1]  (x>3) 求a数列的第n项对1000000007 ...