打开题面,看到许多$\sum$

woc,好神啊,SDOI好强啊

然后展开之后,woc,SDOI好弱啊,怎么T3出个线段树裸题啊。

最后写代码的时候,woc,SDOI怎么出个这么码农的题啊,怎么调啊。

想想自己加上考场$Debuff$是肯定写不出来的。

#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
//#define double long double
#define ll long long
#define mp make_pair
#define maxn 400005 #define sum(x) (1LL*(x)*((x)+1)/2)
#define sum2(x) (1LL*(x)*((x)+1)*(2*(x)+1)/6) double sum_x[maxn],sum_y[maxn],sum_xy[maxn],sum_xx[maxn];
double tag_x[maxn],tag_y[maxn];
bool tag_c[maxn];
int x[maxn],y[maxn];
double sumx,sumy,sumxy,sumxx; int n,m; void update(int o,int l,int r)
{
sum_x[o]=sum_x[o<<1]+sum_x[o<<1|1];
sum_y[o]=sum_y[o<<1]+sum_y[o<<1|1];
sum_xy[o]=sum_xy[o<<1]+sum_xy[o<<1|1];
sum_xx[o]=sum_xx[o<<1]+sum_xx[o<<1|1];
} void add_tag_x(int o,int l,int r,double s)
{
tag_x[o]+=s;
sum_xx[o]+=1LL*s*s*(r-l+1)+2*s*sum_x[o];
sum_xy[o]+=1LL*sum_y[o]*s;
sum_x[o]+=1LL*(r-l+1)*s;
} void add_tag_y(int o,int l,int r,double t)
{
tag_y[o]+=t;
sum_xy[o]+=1LL*sum_x[o]*t;
sum_y[o]+=1LL*(r-l+1)*t;
} void add_cov(int o,int l,int r)
{
sum_y[o]=sum_x[o]=sum(r)-sum(l-1);
sum_xy[o]=sum_xx[o]=sum2(r)-sum2(l-1);
tag_x[o]=tag_y[o]=0; tag_c[o]=true;
} void pushdown(int o,int l,int r)
{
if (o==0||l==r) return;
int mid=l+r>>1;
if (tag_c[o])
{
add_cov(o<<1,l,mid);
add_cov(o<<1|1,mid+1,r);
tag_c[o]=false;
}
if (tag_x[o])
{
add_tag_x(o<<1,l,mid,tag_x[o]);
add_tag_x(o<<1|1,mid+1,r,tag_x[o]);
tag_x[o]=0;
}
if (tag_y[o])
{
add_tag_y(o<<1,l,mid,tag_y[o]);
add_tag_y(o<<1|1,mid+1,r,tag_y[o]);
tag_y[o]=0;
}
} void st_modify(int o,int l,int r,int L,int R,double s,double t)
{
if (L<=l&&r<=R){add_tag_x(o,l,r,s);add_tag_y(o,l,r,t);return;}
int mid=l+r>>1; pushdown(o,l,r);
if (L<=mid) st_modify(o<<1,l,mid,L,R,s,t);
if (R>mid) st_modify(o<<1|1,mid+1,r,L,R,s,t);
update(o,l,r);
} void modify(int l,int r,double s,double t)
{st_modify(1,1,n,l,r,s,t);} void st_cov(int o,int l,int r,int L,int R)
{
if (L<=l&&r<=R){add_cov(o,l,r);return;}
int mid=l+r>>1; pushdown(o,l,r);
if (L<=mid) st_cov(o<<1,l,mid,L,R);
if (R>mid) st_cov(o<<1|1,mid+1,r,L,R);
update(o,l,r);
} void cover(int l,int r)
{st_cov(1,1,n,l,r);} void st_query(int o,int l,int r,int L,int R)
{
if (L<=l&&r<=R){sumx+=sum_x[o],sumy+=sum_y[o],sumxx+=sum_xx[o];sumxy+=sum_xy[o];return;}
int mid=l+r>>1; pushdown(o,l,r);
if (R<=mid) st_query(o<<1,l,mid,L,R);
else if (L>mid) st_query(o<<1|1,mid+1,r,L,R);
else st_query(o<<1,l,mid,L,R),st_query(o<<1|1,mid+1,r,L,R);
} double query(int l,int r)
{
sumx=0; sumy=0;sumxx=0; sumxy=0;
double len=r-l+1; st_query(1,1,n,l,r);
printf("%.10lf\n",(len*sumxy-sumx*sumy)/(len*sumxx-sumx*sumx));
} void build(int o,int l,int r)
{
if (l==r)
{
sum_x[o]=x[l]; sum_y[o]=y[l];
sum_xy[o]=1LL*x[l]*y[l]; sum_xx[o]=1LL*x[l]*x[l];
return ;
}
int mid=l+r>>1;
build(o<<1,l,mid);
build(o<<1|1,mid+1,r);
update(o,l,r);
} int main()
{
scanf("%d%d",&n,&m);
F(i,1,n) scanf("%d",&x[i]);
F(i,1,n) scanf("%d",&y[i]);
build(1,1,n);
F(i,1,m)
{
int opt,l,r,s,t;
scanf("%d",&opt);
switch(opt)
{
case 1:
scanf("%d%d",&l,&r);
query(l,r);
break;
case 2:
scanf("%d%d%d%d",&l,&r,&s,&t);
modify(l,r,(double)s,(double)t);
break;
case 3:
scanf("%d%d%d%d",&l,&r,&s,&t);
cover(l,r);
modify(l,r,(double)s,(double)t);
}
}
}

  

BZOJ 4821 [Sdoi2017]相关分析 ——线段树的更多相关文章

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

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

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

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

  3. (WA)BZOJ 4821: [Sdoi2017]相关分析

    二次联通门 : BZOJ 4821: [Sdoi2017]相关分析 2017.8.23 Updata 妈妈!!这道题卡我!!!就是不然我过!!!!! #include <cstdio> # ...

  4. ●BZOJ 4821 [Sdoi2017]相关分析

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4821 题解: 线段树是真的恶心,(也许是我的方法麻烦了一些吧)首先那个式子可以做如下化简: ...

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

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

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

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

  7. bzoj 4821 [Sdoi2017]相关分析

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4821 题解 做法显然 就是维护一颗线段树 里面装4个东西 区间x的和 区间y的和 区间$x^ ...

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

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

  9. SDOI2017相关分析 线段树

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

随机推荐

  1. UVA 536 TreeRocvery 树重建 (递归)

    根据先序历遍和中序历遍输出后序历遍,并不需要真的建树,直接递归解决 #include<cstdio> #include<cstring> ; char preOrder[N]; ...

  2. 棋盘问题——POJ1321

    棋盘问题——深度优先搜索 题目描述: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘 ...

  3. mysql数据库操作手册

      1 存储过程的写法 以下是一个带有入参的存储过程模板, #删除方案-存储过程 CREATE PROCEDURE procPersonAppointRecallPlanByPlanUuidDelet ...

  4. BZOJ-1833(数位DP)

    #include <bits/stdc++.h> using namespace std; typedef long long ll; ll a,b; int k[20]; ll dp[2 ...

  5. 每天一个linux命令(13):less命令

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面翻 ...

  6. 201621123080《Java程序设计》第9周学习总结

    作业09-集合与泛型 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1. List中指定元素的删除(题集题目) 1.1 实 ...

  7. GoF23种设计模式之行为型模式之迭代器模式

    一.概述    给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.二.适用性1.当访问一个聚合对象的内容而无需暴露它的内部表示的时候.2.当对聚合对象的多 ...

  8. nrf52裸机学习——GPIO操作

    /** * @brief Function for writing a value to a GPIO pin. * * Note that the pin must be configured as ...

  9. viewController备注

    1.按结构可以对iOS的所有ViewController分成两类: 1).主要用于展示内容的ViewController,这种ViewController主要用于为用户展示内容,并与用户交互,如UIT ...

  10. Solr 7 部署与使用踩坑全记录

    前言 Solr 是一种可供企业使用的.基于 Lucene 的搜索服务器,它支持层面搜索.命中醒目显示和多种输出格式.在这篇文章中,我将介绍 Solr 的部署和使用的基本操作,希望能让初次使用的朋友们少 ...