BZOJ4817 SDOI2017 相关分析
4821: [Sdoi2017]相关分析
Time Limit: 10 Sec Memory Limit: 128 MBSec Special Judge
Description
Input
Output
Sample Input
1 2 3
1 2 3
1 1 3
2 2 3 -3 2
1 1 2
3 1 2 2 1
1 1 3
Sample Output
-1.5000000000
-0.6153846154

- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <algorithm>
- #include <vector>
- #include <cstring>
- #include <queue>
- #include <complex>
- #include <stack>
- #define LL long long int
- #define dob long double
- #define ls (x<<1)
- #define rs (x<<1|1)
- using namespace std;
- const int N = ;
- struct Tree{
- dob x,y,xx,xy;
- Tree operator +(const Tree &t){
- return (Tree){x+t.x,y+t.y,xx+t.xx,xy+t.xy};
- }
- }Tr[N*];
- int n,m,lazy_vis[N];
- dob X[N/],Y[N/],lazy_add1[N],lazy_add2[N],lazy_set1[N],lazy_set2[N];
- inline int gi(){
- int x=,res=;char ch=getchar();
- while(ch>''||ch<''){if(ch=='-')res*=-;ch=getchar();}
- while(ch<=''&&ch>='')x=x*+ch-,ch=getchar();
- return x*res;
- }
- inline void build(int x,int l,int r){
- if(l==r){
- Tr[x]=(Tree){X[l],Y[l],1.0*X[l]*X[l],1.0*X[l]*Y[l]};
- return;
- }
- int mid=(l+r)>>;
- build(ls,l,mid);build(rs,mid+,r);
- Tr[x]=Tr[ls]+Tr[rs];
- }
- inline dob calc(dob l,dob r){
- return 0.5*(l+r)*(r-l+);
- }
- inline dob calcpow(dob l,dob r){
- l-=;
- dob p1=1.0*(r)*(r+)*(*r+)/6.0;
- dob p2=1.0*(l)*(l+)*(*l+)/6.0;
- return p1-p2;
- }
- inline void down(int x,int l,int r){
- int mid=(l+r)>>,sl=mid-l+,sr=r-mid;
- if(lazy_vis[x]){
- lazy_add1[ls]=lazy_add1[rs]=lazy_add2[ls]=lazy_add2[rs]=;
- lazy_vis[ls]=lazy_vis[rs]=;
- dob S=lazy_set1[x],T=lazy_set2[x];
- lazy_set1[ls]=lazy_set1[rs]=lazy_set1[x];
- lazy_set2[ls]=lazy_set2[rs]=lazy_set2[x];
- Tr[ls].xx=1.0*sl*S*S+2.0*S*calc(l,mid)+calcpow(l,mid);
- Tr[rs].xx=1.0*sr*S*S+2.0*S*calc(mid+,r)+calcpow(mid+,r);
- Tr[ls].xy=1.0*sl*S*T+1.0*(S+T)*calc(l,mid)+calcpow(l,mid);
- Tr[rs].xy=1.0*sr*S*T+1.0*(S+T)*calc(mid+,r)+calcpow(mid+,r);
- Tr[ls].x=1.0*sl*S+calc(l,mid);Tr[rs].x=1.0*sr*S+calc(mid+,r);
- Tr[ls].y=1.0*sl*T+calc(l,mid);Tr[rs].y=1.0*sr*T+calc(mid+,r);
- lazy_vis[x]=;
- }
- if(lazy_add1[x] || lazy_add2[x]){
- dob S=lazy_add1[x],T=lazy_add2[x];
- lazy_add1[ls]+=S;lazy_add1[rs]+=S;
- lazy_add2[ls]+=T;lazy_add2[rs]+=T;
- Tr[ls].xx+=2.0*Tr[ls].x*S+1.0*sl*S*S;
- Tr[rs].xx+=2.0*Tr[rs].x*S+1.0*sr*S*S;
- Tr[ls].xy+=1.0*Tr[ls].x*T+1.0*Tr[ls].y*S+1.0*sl*S*T;
- Tr[rs].xy+=1.0*Tr[rs].x*T+1.0*Tr[rs].y*S+1.0*sr*S*T;
- Tr[ls].x+=1.0*sl*S;Tr[rs].x+=1.0*sr*S;
- Tr[ls].y+=1.0*sl*T;Tr[rs].y+=1.0*sr*T;
- lazy_add1[x]=lazy_add2[x]=;
- }
- }
- inline Tree query_1(int x,int l,int r,int xl,int xr){
- if(xl<=l && r<=xr)return Tr[x];
- down(x,l,r);int mid=(l+r)>>;
- if(xr<=mid)return query_1(ls,l,mid,xl,xr);
- else if(xl>mid)return query_1(rs,mid+,r,xl,xr);
- return query_1(ls,l,mid,xl,mid)+query_1(rs,mid+,r,mid+,xr);
- }
- inline void update_2(int x,int l,int r,int xl,int xr,dob S,dob T){
- if(xl<=l && r<=xr){
- lazy_add1[x]+=S;lazy_add2[x]+=T;
- Tr[x].xx+=2.0*Tr[x].x*S+1.0*(r-l+)*S*S;
- Tr[x].xy+=1.0*Tr[x].x*T+1.0*Tr[x].y*S+1.0*(r-l+)*S*T;
- Tr[x].x+=1.0*(r-l+)*S;Tr[x].y+=1.0*(r-l+)*T;
- return;
- }
- down(x,l,r);int mid=(l+r)>>;
- if(xr<=mid)update_2(ls,l,mid,xl,xr,S,T);
- else if(xl>mid)update_2(rs,mid+,r,xl,xr,S,T);
- else update_2(ls,l,mid,xl,mid,S,T),update_2(rs,mid+,r,mid+,xr,S,T);
- Tr[x]=Tr[ls]+Tr[rs];
- }
- inline void update_3(int x,int l,int r,int xl,int xr,dob S,dob T){
- if(xl<=l && r<=xr){
- lazy_add1[x]=lazy_add2[x]=;
- lazy_vis[x]=;lazy_set1[x]=S;lazy_set2[x]=T;
- Tr[x].xx=1.0*(r-l+)*S*S+2.0*S*calc(1.0*l,1.0*r)+calcpow(1.0*l,1.0*r);
- Tr[x].xy=1.0*(r-l+)*S*T+1.0*(S+T)*calc(l,r)+calcpow(l,r);
- Tr[x].x=1.0*(r-l+)*S+calc(l,r);Tr[x].y=1.0*(r-l+)*T+calc(l,r);
- return;
- }
- down(x,l,r);int mid=(l+r)>>;
- if(xr<=mid)update_3(ls,l,mid,xl,xr,S,T);
- else if(xl>mid)update_3(rs,mid+,r,xl,xr,S,T);
- else update_3(ls,l,mid,xl,mid,S,T),update_3(rs,mid+,r,mid+,xr,S,T);
- Tr[x]=Tr[ls]+Tr[rs];
- }
- int main()
- {
- /*freopen(".in","r",stdin);
- freopen(".out","w",stdout);*/
- n=gi();m=gi();
- for(int i=;i<=n;++i)X[i]=gi();
- for(int i=;i<=n;++i)Y[i]=gi();
- build(,,n);
- for(int i=;i<=m;++i){
- int type=gi();
- if(type==){
- int l=gi(),r=gi();
- Tree ans=query_1(,,n,l,r);
- dob fz=ans.xy-ans.x*ans.y/(r-l+);
- dob fm=ans.xx-ans.x*ans.x/(r-l+);
- printf("%.10Lf\n",fz/fm);
- }
- if(type==){
- int l=gi(),r=gi(),S=gi(),T=gi();
- update_2(,,n,l,r,1.0*S,1.0*T);
- }
- if(type==){
- int l=gi(),r=gi(),S=gi(),T=gi();
- update_3(,,n,l,r,1.0*S,1.0*T);
- }
- }
- /*fclose(stdin);
- fclose(stdout);*/
- return ;
- }
相关分析
BZOJ4817 SDOI2017 相关分析的更多相关文章
- [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 ...
- 【BZOJ4821】[SDOI2017]相关分析(线段树)
[BZOJ4821][SDOI2017]相关分析(线段树) 题面 BZOJ 洛谷 题解 看看询问要求的东西是什么.把所有的括号拆开,不难发现要求的就是\(\sum x,\sum y,\sum xy,\ ...
- [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 ...
- AC日记——[SDOI2017]相关分析 洛谷 P3707
[SDOI2017]相关分析 思路: 裸线段树: (玄学ac): 代码: #include <bits/stdc++.h> using namespace std; #define max ...
- 【BZOJ4821】[Sdoi2017]相关分析 线段树
[BZOJ4821][Sdoi2017]相关分析 Description Frank对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. ...
- (WA)BZOJ 4821: [Sdoi2017]相关分析
二次联通门 : BZOJ 4821: [Sdoi2017]相关分析 2017.8.23 Updata 妈妈!!这道题卡我!!!就是不然我过!!!!! #include <cstdio> # ...
随机推荐
- Eclipse创建一个JAVA WEB项目
继上一篇博客,Eclipse的Tomcat已经配置好了,现在我们开始创建web项目. 1.打开Eclipse,选择菜单栏的file>New>Dynamic Web Project 弹出窗口 ...
- php数据分页显示基础
一:分页原理: 所谓分页显示,也就是将数据库中的结果集认为的分成一段一段的来显示,需要两个初始的参数: 每页多少条记录 ($PageSize)? 当前是第几页($CurrentPageID)? 还有其 ...
- 小程序采坑系列-this.setData
今天踩了大坑,坑里还都是碎瓶渣子.. 先说一下基本使用.官网也有. 比如说你在main.js里面有这些变量.想修改某些值. data: { main_view_bgcolor: "" ...
- Caddy服务器搭建和实现文件共享
1:Caddy介绍 作为新兴 Web 服务器,Caddy 提供了很多简单易用的功能而没有历史的包袱,其默认支持并且能帮你自动配置 HTTP/2.HTTPS,对于 IPV6.WebSockets 都有很 ...
- IK-Analyzer(5.3.1)动态配置自定义词典
参考文献:http://blog.csdn.net/fatpanda/article/details/37911079 jar包: IK-Analyzer-extra-5.3.1.jar IKAnal ...
- 整合SSH时,遇到了org.springframework.beans.factory.BeanCreationException错误
严重: StandardWrapper.Throwableorg.springframework.beans.factory.BeanCreationException: Error creating ...
- Netty4.0.24.Final 版本中 IdleStateHandler 使用时的局限性
使用Netty在客户端和服务端建立通讯通道,一般来说,一个连接可能很久没有访问,由于各种各样的网络问题导致连接已经失效,客户端再次发送请求时会产生连接异常. 基于这个原因,需要在客户端和服务端之间建立 ...
- 来个Button看一看
0.目录 1.前言 2.基本属性与方法 3.点点更健康 4.我的Button有点多 5.震惊!TextView竟然... 1.前言 每次写代码总会忘记一些东西,又要重新Goooooooooogle,好 ...
- 【NOIP2015提高组】跳石头
https://www.luogu.org/problem/show?pid=2678 最小值最大问题,二分答案.每次检查是否能仅移走m块岩石使得所有跳跃距离均大于等于mid. #include &l ...
- Python2/3中的urllib库
urllib库对照速查表 Python2.X Python3.X urllib urllib.request, urllib.error, urllib.parse urllib2 urllib.re ...