[bzoj4821][Sdoi2017]相关分析
来自FallDream的博客,未经允许,请勿转载,谢谢。
- #include<iostream>
- #include<cstdio>
- #define MN 100000
- #define ld long double
- using namespace std;
- inline int read()
- {
- int x = , f = ; char ch = getchar();
- while(ch < '' || ch > ''){ if(ch == '-') f = -; ch = getchar();}
- while(ch >= '' && ch <= ''){x = x * + ch - '';ch = getchar();}
- return x * f;
- }
- struct data{ld x,y,sqx,xy;
- friend data operator + (data a,data b)
- {
- return (data){a.x+b.x,a.y+b.y,a.sqx+b.sqx,a.xy+b.xy};
- }
- }res;
- struct Mark{int op,s,t;}M[MN+];
- struct Tree{int l,r,tag;ld s,t;data x;}T[MN*+];
- int n,m,X[MN+],Y[MN+],tms=;
- void build(int x,int l,int r)
- {
- if((T[x].l=l)==(T[x].r=r))
- {
- T[x].x=(data){X[l],Y[l],(ld)X[l]*X[l],(ld)X[l]*Y[l]};
- return;
- }
- int mid=l+r>>;
- build(x<<,l,mid);build(x<<|,mid+,r);
- T[x].x=T[x<<].x+T[x<<|].x;
- }
- inline ld Sum(int x){return (ld)x*(x+)/;}
- inline ld Sqr(int x){return (ld)x*(x+)*(*x+)/;}
- void _Mark(int x,int op,int s,int t)
- {
- if(op==){T[x].tag=;T[x].s=s;T[x].t=t;}
- else if(T[x].tag) T[x].s+=s,T[x].t+=t;
- else T[x].tag=,T[x].s=s,T[x].t=t;
- if(op==)
- {
- T[x].x.sqx+=(ld)*s*T[x].x.x+(ld)(T[x].r-T[x].l+)*s*s;
- T[x].x.xy+=(ld)s*T[x].x.y+(ld)t*T[x].x.x+(ld)(T[x].r-T[x].l+)*s*t;
- T[x].x.x+=(ld)(T[x].r-T[x].l+)*s;
- T[x].x.y+=(ld)(T[x].r-T[x].l+)*t;
- }
- else
- {
- T[x].x.x=Sum(T[x].r)-Sum(T[x].l-)+(ld)(T[x].r-T[x].l+)*s;
- T[x].x.y=Sum(T[x].r)-Sum(T[x].l-)+(ld)(T[x].r-T[x].l+)*t;
- T[x].x.sqx=(ld)(T[x].r-T[x].l+)*s*s+Sqr(T[x].r)-Sqr(T[x].l-)+(ld)*s*(Sum(T[x].r)-Sum(T[x].l-));
- T[x].x.xy=(ld)(T[x].r-T[x].l+)*s*t+(ld)(s+t)*(Sum(T[x].r)-Sum(T[x].l-))+Sqr(T[x].r)-Sqr(T[x].l-);
- }
- }
- void pushdown(int x)
- {
- if(T[x].tag)
- {
- int l=x<<,r=l|;
- _Mark(l,T[x].tag,T[x].s,T[x].t);
- _Mark(r,T[x].tag,T[x].s,T[x].t);
- T[x].tag=;
- }
- }
- void Modify(int x,int l,int r,int op)
- {
- if(T[x].l==l&&T[x].r==r)
- {
- _Mark(x,M[op].op,M[op].s,M[op].t);
- return;
- }
- pushdown(x);
- int mid=T[x].l+T[x].r>>;
- if(r<=mid) Modify(x<<,l,r,op);
- else if(l>mid) Modify(x<<|,l,r,op);
- else Modify(x<<,l,mid,op),Modify(x<<|,mid+,r,op);
- T[x].x=T[x<<].x+T[x<<|].x;
- }
- void Query(int x,int l,int r)
- {
- if(T[x].l==l&&T[x].r==r){res=res+T[x].x;return;}
- pushdown(x);
- int mid=T[x].l+T[x].r>>;
- if(r<=mid) Query(x<<,l,r);
- else if(l>mid) Query(x<<|,l,r);
- else Query(x<<,l,mid),Query(x<<|,mid+,r);
- }
- main()
- {
- n=read();m=read();
- for(int i=;i<=n;++i)X[i]=read();
- for(int i=;i<=n;++i)Y[i]=read();
- build(,,n);
- for(int i=;i<=m;++i)
- {
- int op=read(),l=read(),r=read();
- if(op==)
- {
- res=(data){,,,};Query(,l,r);
- ld _x=(ld)res.x/(r-l+),_y=(ld)res.y/(r-l+);
- ld u=res.xy-_x*res.y-_y*res.x+_x*_y*(r-l+);
- ld d=res.sqx-*_x*res.x+_x*_x*(r-l+);
- printf("%.8lf\n",(double)u/(double)d);
- }
- else
- {
- int s=read(),t=read();
- M[i]=(Mark){op,s,t};
- Modify(,l,r,i);
- }
- }
- return ;
- }
[bzoj4821][Sdoi2017]相关分析的更多相关文章
- BZOJ4821 SDOI2017相关分析(线段树)
纯粹的码农题.维护x的和.y的和.xy的和.x2的和即可.可能会炸long long. #include<iostream> #include<cstdio> #include ...
- 【BZOJ4821】[SDOI2017]相关分析(线段树)
[BZOJ4821][SDOI2017]相关分析(线段树) 题面 BZOJ 洛谷 题解 看看询问要求的东西是什么.把所有的括号拆开,不难发现要求的就是\(\sum x,\sum y,\sum xy,\ ...
- 【BZOJ4821】[Sdoi2017]相关分析 线段树
[BZOJ4821][Sdoi2017]相关分析 Description Frank对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. ...
- BZOJ4817 SDOI2017 相关分析
4821: [Sdoi2017]相关分析 Time Limit: 10 Sec Memory Limit: 128 MBSec Special Judge Description Frank对天文 ...
- [Sdoi2017]相关分析 [线段树]
[Sdoi2017]相关分析 题意:沙茶线段树 md其实我考场上还剩一个多小时写了40分 其实当时写正解也可以吧1h也就写完了不过还要拍一下 正解代码比40分短2333 #include <io ...
- [题目] Luogu P3707 [SDOI2017]相关分析
参考资料:[Luogu 3707] SDOI2017 相关分析 P3707 [SDOI2017]相关分析 TFRAC FRAC DFRAC \(\tfrac{\sum}{1}\) \(\frac{\s ...
- [Luogu 3707] SDOI2017 相关分析
[Luogu 3707] SDOI2017 相关分析 前言 Capella 和 Frank 一样爱好天文学. 她常在冬季的夜晚,若有所思地望着东北方上空的五边形中,最为耀眼的一个顶点. 那一抹金黄曾带 ...
- 4821: [Sdoi2017]相关分析
4821: [Sdoi2017]相关分析 链接 分析: 大力拆式子,化简,然后线段树.注意精度问题与爆longlong问题. 代码: #include<cstdio> #include&l ...
- P3707 [SDOI2017]相关分析
P3707 [SDOI2017]相关分析 线段树裸题?但是真的很麻烦QAQ 题目给的式子是什么不用管,大力拆开,就是\(\frac{\sum x_iy_i-\overline xy_i-\overli ...
随机推荐
- XCode Build Settings中几种Search Paths
Header search path:去查找头文件的路径,同在在你需要使用第三方库的时候,在这里设置你的头文件路径目录,如图 <code><span class="str& ...
- python利用twilio模块给自己发短信
1.访问http://twilio.com/并填写注册表单.注册了新账户后,你需要验证一个手机号码,短信将发给该号码. 2.Twilio 提供的试用账户包括一个电话号码,它将作为短信的发送者.你将需要 ...
- Hibernate实体类注解解释
Hibernate注解1.@Entity(name="EntityName")必须,name为可选,对应数据库中一的个表2.@Table(name="",cat ...
- bzoj 4399 魔法少女LJJ
4399: 魔法少女LJJ Time Limit: 20 Sec Memory Limit: 162 MBhttp://www.lydsy.com/JudgeOnline/problem.php?i ...
- sqlserver学习_01
sqlserver的学习成长之路,每一个技术的学习过程都是值得让人回味的,现在百度上关于sqlser的资料很多,但是都太杂,希望能为大家分享一点简单易懂的干货,跟大家一起进步学习. 一.建表 1.创建 ...
- thinkphp中定义自己的函数
可以在前台和后台的公共文件夹中common.php中定义自己的函数,这样就可以在控制器中调用,而不需要调用对象了 /** * @name addvtorandp * @author 黄峰1664253 ...
- mysql数据库基本操作
下载地址 http://www.mysql.com/downloads/mysql/ 端口号:3306 用户名:root 密码:自定义 连接到MySQL服务器 >mysql -uroot -pr ...
- 改变this不要怕!!!
在之前的学习和工作中,会不必要的涉及到 改变this的指向问题: 脑子里会想到的是 apply, call, bind 这三个 可逆知道他的区别吗? 1. bind区别于 apply和call 是因为 ...
- js实现图片(高度不确定)懒加载
最近一直在弄广告页,由于广告页几乎都是图片拼凑起来的,为了减少服务器压力和带宽,采用图片懒加载方式,但是我们的图片高度又不确定,所以我在网上下载了echo.js自己改了一下. 大体思路是:让首页先加载 ...
- Leetcode:Two Sum
原题:https://leetcode.com/problems/two-sum/ 尝试了两种方法: 方法一: var twoSum = function(nums, target) { for(va ...