纯粹的码农题。维护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. 【转载】四元数-Quaterion

    原文:四元数-Quaterion 四元数(Quaterion)   罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公用协议   ...

  2. IOI 2017 Practice Contest mountains

    Mountains 题面 题意: 选最多的点使得两两看不见. 分析: 分治,solve(l,r)为区间[l,r]的答案.那么如果不选最高点,分治两边即可,选了最高点,那么在最高点看不见的区间里分治. ...

  3. pg mysql 比较

    PostgreSQL 与 MySQL比较: 一.pg优势: MySQL 不支持 OVER 子句, 而 Pg 支持 它可以存储 array 和 json, 可以在 array 和 json 上建索引, ...

  4. XSS----payload,绕过,xss小游戏记录

    一.XSS 1.原理:攻击者把恶意的脚本代码注入到网页中,等待其他用户浏览 这些网页(或触发其他条件),从而执行其中的恶意代码. 1.xss实例代码: test.html <!DOCTYPE h ...

  5. Sysbench安装步骤及详情

    Sysbench安装步骤及详情 Sysbench是压力测试工具,可以测试系统的CPU,内存,I/O等,也可以用于数据库的性能测试 Sysbench安装步骤: 安装具体分为Ubuntu16.04和Cen ...

  6. TW实习日记:第18天

    今天的bug没有那么多了,都是些小bug,一下就改好了.或者是接口那边数据返回的有问题,通知一下同事就ok了.主要今天是在赶功能进度,然而有一个功能模块需求里并没有写,实在是不知道要做成什么样子,真的 ...

  7. 166. Nth to Last Node in List

    Description Find the nth to last element of a singly linked list. The minimum number of nodes in lis ...

  8. Liunx 基本命令

    find : find ./ -name "*instantiate_post_check.yml*" grep: openstack network show fe92bfcf- ...

  9. java length属性、length()、size()

    length属性 length是属性,用于说明数组的长度. String []list={"wo","shi","shuaibi"}; Sy ...

  10. AC 自动机——多模式串匹配

    网站上的敏感词过滤是怎么实现的呢? 实际上,这些功能最基本的原理就是字符串匹配算法,也就是通过维护一个敏感词的字典,当用户输入一段文字内容后,通过字符串匹配算法来检查用户输入的内容是否包含敏感词. B ...