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> # ...
随机推荐
- Python——正则表达式
此篇文章结合小甲鱼的笔记和视频整理. 1 编译 Python 通过 re 模块为正则表达式引擎提供一个接口,同时允许你将正则表达式编译成模式对象,并用它们来进行匹配. 正则表达式被编译为模式对象,该对 ...
- VMware虚拟机安装教程
在实际的开发过程中,使用到VMware的时候是很多的.当你的电脑安装的是windows系统而想使用linux系统时,为了避免对本机的系统进行操作,那么安装虚拟机就是一项不错的选择. 在写这篇博文时,刚 ...
- scrapy初试水 day02(正则提取)
1.处理方式 法一 通过HtmlXPathSelectorimport scrapyfrom scrapy.selector import HtmlXPathSelectorclass DmozSpi ...
- 在C#中输出变量的地址
int a = 3; GCHandle handle = GCHandle.Alloc(a); var pin = GCHandle.ToIntPtr(handle); Console.WriteLi ...
- JSP7(Cookie与javamail)
一.cookie是什么意思? 英文直接翻译过来的意思呢就是小甜品 Cookie英文意指饼干,不过在电脑术语中它可不像饼干那么简单.简单的说,Cookie就是服务器暂存放在你计算机上的一笔资料,好让服务 ...
- Qname
Qname的全称是qualified name. Qname由三部分组成: 1.Namespace prefix 2.A colon character(":") 3.A loca ...
- navigator.userAgent浏览器检测(前端基础系列)
对于前端来说,浏览器检测已经不陌生了,在做一些页面是,需要针对不同的浏览器进行处理不同的逻辑,最简单的就是区分pc和移动端的浏览器,或是android 和ios下的浏览器. 一.浏览器检测的由来? ...
- 有关.NET链接Oracle数据库,使用连接池pooling=true时问题
.net链接oracle数据库时,当链接字符串中pooling=true时,视图结构变更时程序报错问题,还请高手指教 现象: 链接字符串: 注意:这里pooling=true: 测试视图: 执行的SQ ...
- 【NOI2005】维护数列
https://daniu.luogu.org/problem/show?pid=2042 一道伸展树维护数列的很悲伤的题目,共要维护两个标记和两个数列信息,为了维护MAX-SUM还要维护从左端开始的 ...
- [亲测]ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问
前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...