纯粹的码农题。维护x的和、y的和、xy的和、x2的和即可。可能会炸long long。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long double
#define N 100010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,m,a[N],b[N],L[N<<],R[N<<];
ll lazyaddx[N<<],lazyaddy[N<<],s[N],t[N];
bool lazyres[N<<];
struct data
{
ll sumx,sumy,sumxy,sqr;
data operator +(const data&a) const
{
data c;
c.sumx=sumx+a.sumx;
c.sumy=sumy+a.sumy;
c.sumxy=sumxy+a.sumxy;
c.sqr=sqr+a.sqr;
return c;
}
}tree[N<<];
void up(int k){tree[k]=tree[k<<]+tree[k<<|];}
void update(int k,ll x,ll y,bool p)
{
if (p)
{
tree[k].sumx=tree[k].sumy=s[R[k]]-s[L[k]-];
tree[k].sumxy=tree[k].sqr=t[R[k]]-t[L[k]-];
lazyaddx[k]=lazyaddy[k]=,lazyres[k]=;
}
tree[k].sqr+=x*x*(R[k]-L[k]+)+*x*tree[k].sumx;
tree[k].sumxy+=x*tree[k].sumy;
tree[k].sumx+=(R[k]-L[k]+)*x;
tree[k].sumxy+=y*tree[k].sumx;
tree[k].sumy+=(R[k]-L[k]+)*y;
lazyaddx[k]+=x,lazyaddy[k]+=y;
}
void down(int k)
{
update(k<<,lazyaddx[k],lazyaddy[k],lazyres[k]);
update(k<<|,lazyaddx[k],lazyaddy[k],lazyres[k]);
lazyaddx[k]=lazyaddy[k]=;lazyres[k]=;
}
void build(int k,int l,int r)
{
L[k]=l,R[k]=r;
if (l==r) {tree[k].sumx=a[l],tree[k].sumy=b[l],tree[k].sumxy=1ll*a[l]*b[l],tree[k].sqr=1ll*a[l]*a[l];return;}
int mid=l+r>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
up(k);
}
data query(int k,int l,int r)
{
if (L[k]==l&&R[k]==r) return tree[k];
if (lazyaddx[k]||lazyaddy[k]||lazyres[k]) down(k);
int mid=L[k]+R[k]>>;
if (r<=mid) return query(k<<,l,r);
else if (l>mid) return query(k<<|,l,r);
else return query(k<<,l,mid)+query(k<<|,mid+,r);
}
void res(int k,int l,int r)
{
if (L[k]==l&&R[k]==r) {update(k,,,);return;}
if (lazyaddx[k]||lazyaddy[k]||lazyres[k]) down(k);
int mid=L[k]+R[k]>>;
if (r<=mid) res(k<<,l,r);
else if (l>mid) res(k<<|,l,r);
else res(k<<,l,mid),res(k<<|,mid+,r);
up(k);
}
void add(int k,int l,int r,int x,int y)
{
if (L[k]==l&&R[k]==r) {update(k,x,y,);return;}
if (lazyaddx[k]||lazyaddy[k]||lazyres[k]) down(k);
int mid=L[k]+R[k]>>;
if (r<=mid) add(k<<,l,r,x,y);
else if (l>mid) add(k<<|,l,r,x,y);
else add(k<<,l,mid,x,y),add(k<<|,mid+,r,x,y);
up(k);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4821.in","r",stdin);
freopen("bzoj4821.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read(),m=read();
for (int i=;i<=n;i++) a[i]=read();
for (int i=;i<=n;i++) b[i]=read();
for (int i=;i<=n;i++) s[i]=s[i-]+i,t[i]=t[i-]+1ll*i*i;
build(,,n);
while (m--)
{
int op=read();
if (op==)
{
int l=read(),r=read();
data k=query(,l,r);
ll x=(ll)k.sumx/(r-l+),y=(ll)k.sumy/(r-l+);
printf("%.6lf\n",(double)((k.sumxy-k.sumx*y-k.sumy*x+x*y*(r-l+))/(k.sqr-*k.sumx*x+x*x*(r-l+))));
}
else
{
int l=read(),r=read(),x=read(),y=read();
if (op==) res(,l,r);add(,l,r,x,y);
}
}
return ;
}

BZOJ4821 SDOI2017相关分析(线段树)的更多相关文章

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

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

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

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

  3. BZOJ 4821 [Sdoi2017]相关分析 ——线段树

    打开题面,看到许多$\sum$ woc,好神啊,SDOI好强啊 然后展开之后,woc,SDOI好弱啊,怎么T3出个线段树裸题啊. 最后写代码的时候,woc,SDOI怎么出个这么码农的题啊,怎么调啊. ...

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

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

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

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

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

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

  7. SDOI2017相关分析 线段树

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

  8. 【BZOJ4821】【SDOI2017】相关分析 [线段树]

    相关分析 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Frank对天文学非常感兴趣,他经 ...

  9. luogu3707 相关分析 (线段树)

    把式子展开以后会发现,可以用线段树维护$x,y,x*y,x^2$分别的区间和 然后操作有区间加和区间修改 这个pushdown的时候,如果改和加的标记同时存在,那一定是先改再加,要不然加的标记已经被清 ...

随机推荐

  1. object转List<XXX>的问题

    List<object> demo(object a) { List<object> res = new List<object>(); object c = a; ...

  2. JetBrains Makes its Products Free for Students(JetBrains 对学生免费了)

    只要你有大学有些 后缀是 .edu的  如:@buaa.edu.cn,用你的邮箱注册,就可以免费试用 JetBrains了 下面是详细注册步骤: Hello everyone, If you’re o ...

  3. 北京Uber优步司机奖励政策(1月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. WebService-CXF使用

    一.SOAP和WSDL概念: SOAP(Simple Object Access Protocol):简单对象访问协议 SOAP作为一个基于XML语言的协议用于在网上传输数据 SOAP=在Http的基 ...

  5. python import vs from import

    https://stackoverflow.com/questions/9439480/from-import-vs-import

  6. centos7下搭建django

    安装环境:centos7.4 1 安装nginx yum install nginx 注:尝试过在本地和腾讯云上安装,使用同一条命令:在本地安装提示没有可用安装包,云上安装正常 启动nginx,并启用 ...

  7. 在Unity中使用LitJson解析json文件

    LitJson 这个库需要找资源,找到LitJson.dll后将它放在Assets文件夹下,在脚本中使用using引入即可 测试代码 json文件: {"Archice":[{&q ...

  8. lintcode 二叉树中序遍历

    /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * Tr ...

  9. @meida 媒体查询

    示例 @meida 媒体查询 在进行书写的时候需要考虑到加载顺序和样式权重使用meida响应式实现不同宽度布局示例 常用工具 https://mydevice.io 参考链接 https://deve ...

  10. Paper Reading - Learning like a Child: Fast Novel Visual Concept Learning from Sentence Descriptions of Images ( ICCV 2015 )

    Link of the Paper: https://arxiv.org/pdf/1504.06692.pdf Innovations: The authors propose the Novel V ...