SDOI2017相关分析 线段树
题目
思路
\]
\]
\]
\]
\]
\]
\]
\]
\]
\]
\]
\]
其实不用这么麻烦的、、
好了,剩下的去维护吧
好吧,我太菜了
要开long doule
代码
#include <bits/stdc++.h>
#define ll long double
#define ls rt<<1
#define rs rt<<1|1
using namespace std;
const int N=2e5+7;
int read() {
int x=0,f=1;char s=getchar();
for (;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for (;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
ll x[N],y[N];
struct node {
int l,r,siz;
ll tot[2],pingfang,chengji;
ll lazy,S,T;
}e[N<<2];
void pushup(int rt) {
e[rt].tot[0]=e[ls].tot[0]+e[rs].tot[0];
e[rt].tot[1]=e[ls].tot[1]+e[rs].tot[1];
e[rt].pingfang=e[ls].pingfang+e[rs].pingfang;
e[rt].chengji=e[ls].chengji+e[rs].chengji;
}
ll calc(int x) {return (ll)x*(x+1)/2;};
ll calc2(int x) {return (ll)x*(x+1)/2*(2*x+1)/3;};
void pushdown(int rt) {
if(e[rt].lazy) {
e[ls].tot[0]=e[ls].tot[1]=calc(e[ls].r)-calc(e[ls].l-1);
e[ls].pingfang=e[ls].chengji=calc2(e[ls].r)-calc2(e[ls].l-1);
e[ls].S=e[ls].T=0;
e[ls].lazy=1;
e[rs].tot[0]=e[rs].tot[1]=calc(e[rs].r)-calc(e[rs].l-1);
e[rs].pingfang=e[rs].chengji=calc2(e[rs].r)-calc2(e[rs].l-1);
e[rs].S=e[rs].T=0;
e[rs].lazy=1;
e[rt].lazy=0;
}
if(e[rt].S||e[rt].T) {
e[ls].chengji+=e[ls].tot[0]*e[rt].T+e[ls].tot[1]*e[rt].S+e[rt].S*e[rt].T*e[ls].siz;
e[ls].pingfang+=e[ls].tot[0]*2*e[rt].S+e[rt].S*e[rt].S*e[ls].siz;
e[ls].tot[0]+=e[ls].siz*e[rt].S;
e[ls].tot[1]+=e[ls].siz*e[rt].T;
e[ls].S+=e[rt].S;
e[ls].T+=e[rt].T;
e[rs].chengji+=e[rs].tot[0]*e[rt].T+e[rs].tot[1]*e[rt].S+e[rt].S*e[rt].T*e[rs].siz;
e[rs].pingfang+=e[rs].tot[0]*2*e[rt].S+e[rt].S*e[rt].S*e[rs].siz;
e[rs].tot[0]+=e[rs].siz*e[rt].S;
e[rs].tot[1]+=e[rs].siz*e[rt].T;
e[rs].S+=e[rt].S;
e[rs].T+=e[rt].T;
e[rt].S=e[rt].T=0;
}
}
void build(int l,int r,int rt) {
e[rt].l=l,e[rt].r=r,e[rt].siz=r-l+1;
if(l==r) {
e[rt].tot[0]=x[l];
e[rt].tot[1]=y[l];
e[rt].pingfang=x[l]*x[l];
e[rt].chengji=x[l]*y[l];
return;
}
int mid=(l+r)>>1;
build(l,mid,ls);
build(mid+1,r,rs);
pushup(rt);
}
void modify_1(int L,int R,ll S,ll T,int rt) {
if(L<=e[rt].l&&e[rt].r<=R) {
e[rt].chengji+=e[rt].tot[0]*T+e[rt].tot[1]*S+S*T*e[rt].siz;
e[rt].pingfang+=e[rt].tot[0]*2*S+S*S*e[rt].siz;
e[rt].tot[0]+=e[rt].siz*S;
e[rt].tot[1]+=e[rt].siz*T;
e[rt].S+=S;
e[rt].T+=T;
return;
}
pushdown(rt);
int mid=(e[rt].l+e[rt].r)>>1;
if(L<=mid) modify_1(L,R,S,T,ls);
if(R>mid) modify_1(L,R,S,T,rs);
pushup(rt);
}
void modify_2(int L,int R,int rt) {
if(L<=e[rt].l&&e[rt].r<=R) {
e[rt].tot[0]=e[rt].tot[1]=calc(e[rt].r)-calc(e[rt].l-1);
e[rt].pingfang=e[rt].chengji=calc2(e[rt].r)-calc2(e[rt].l-1);
e[rt].S=e[rt].T=0;
e[rt].lazy=1;
return;
}
pushdown(rt);
int mid=(e[rt].l+e[rt].r)>>1;
if(L<=mid) modify_2(L,R,ls);
if(R>mid) modify_2(L,R,rs);
pushup(rt);
}
ll query(int L,int R,int opt,int rt) {
if(L<=e[rt].l&&e[rt].r<=R) {
if(opt==0) return e[rt].tot[0];
if(opt==1) return e[rt].tot[1];
if(opt==2) return e[rt].pingfang;
if(opt==3) return e[rt].chengji;
}
pushdown(rt);
int mid=(e[rt].l+e[rt].r)>>1;
ll ans=0;
if(L<=mid) ans+=query(L,R,opt,ls);
if(R>mid) ans+=query(L,R,opt,rs);
pushup(rt);
return ans;
}
int main() {
int n=read(),m=read();
for(int i=1;i<=n;++i) x[i]=read();
for(int i=1;i<=n;++i) y[i]=read();
build(1,n,1);
while(m--) {
int opt=read(),L=read(),R=read();
if(opt==1) {
ll tot_x=query(L,R,0,1);
ll tot_y=query(L,R,1,1);
ll tot_x_x=query(L,R,2,1);
ll tot_x_y=query(L,R,3,1);
long double a=tot_x_y-tot_x*tot_y/(R-L+1);
long double b=tot_x_x-tot_x*tot_x/(R-L+1);
printf("%.10Lf\n",(long double)a/b);
} else if(opt==2) {
ll S=read(),T=read();
modify_1(L,R,(ll)S,(ll)T,1);
} else {
ll S=read(),T=read();
modify_2(L,R,1);
modify_1(L,R,(ll)S,(ll)T,1);
}
}
return 0;
}
SDOI2017相关分析 线段树的更多相关文章
- [Sdoi2017]相关分析 [线段树]
[Sdoi2017]相关分析 题意:沙茶线段树 md其实我考场上还剩一个多小时写了40分 其实当时写正解也可以吧1h也就写完了不过还要拍一下 正解代码比40分短2333 #include <io ...
- 【BZOJ4821】[Sdoi2017]相关分析 线段树
[BZOJ4821][Sdoi2017]相关分析 Description Frank对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. ...
- BZOJ 4821 [Sdoi2017]相关分析 ——线段树
打开题面,看到许多$\sum$ woc,好神啊,SDOI好强啊 然后展开之后,woc,SDOI好弱啊,怎么T3出个线段树裸题啊. 最后写代码的时候,woc,SDOI怎么出个这么码农的题啊,怎么调啊. ...
- 洛谷P3707 [SDOI2017]相关分析(线段树)
题目描述 Frank对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. Frank不仅喜欢观测,还喜欢分析观测到的数据.他经常分析两个 ...
- BZOJ 4821: [Sdoi2017]相关分析 线段树 + 卡精
考试的时候切掉了,然而卡精 + 有一个地方忘开 $long long$,完美挂掉 $50$pts. 把式子化简一下,然后直接拿线段树来维护即可. Code: // luogu-judger-enabl ...
- BZOJ.4821.[SDOI2017]相关分析(线段树)
BZOJ LOJ 洛谷 恶心的拆式子..然后就是要维护\(\sum x_i,\ \sum y_i,\ \sum x_iy_i,\ \sum x_i^2\). 操作三可以看成初始化一遍,然后同操作二. ...
- 【BZOJ4821】【SDOI2017】相关分析 [线段树]
相关分析 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Frank对天文学非常感兴趣,他经 ...
- luogu3707 相关分析 (线段树)
把式子展开以后会发现,可以用线段树维护$x,y,x*y,x^2$分别的区间和 然后操作有区间加和区间修改 这个pushdown的时候,如果改和加的标记同时存在,那一定是先改再加,要不然加的标记已经被清 ...
- LOJ #2005. 「SDOI2017」相关分析 线段树维护回归直线方程
题目描述 \(Frank\) 对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. \(Frank\) 不仅喜欢观测,还喜欢分析观测到的 ...
随机推荐
- fiddler2抓包数据工具使用教程
一款免费且功能强大的数据包抓取软件.它通过代理的方式获取程序http通讯的数据,可以用其检测网页和服务器的交互情况,能够记录所有客户端和服务器间的http请求,支持监视.设置断点.甚至修改输入输出数据 ...
- const_cast, dynamic_cast, static_cast,reinterpret_cast
一.const_cast:用于移除const数据,目标数据类型必须与原类型相同 二.dynamic_cast:用于在两个不同类型之间进行强制转换并且在执行运行时检查它.保证它的合法性,如果在两个互相矛 ...
- Yii数据对象笔记
要执行一个SQL查询,应该遵循以下步骤 - 创建一个 yii\db\Command 的 SQL查询命令 绑定参数(非必须) 执行命令 第1步 - 创建一个 actionTestDb()方法在 Site ...
- 20155228 2016-2017-2 《Java程序设计》第4周学习总结
20155228 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 继承与多态 继承:在Java中,子类只能继承一个父类,关键字为extends,子类和父类之间 ...
- Python 第四阶段 学习记录之----多线程
多线程 多线程例子, 注释部份即为多线程的使用 #-*- coding: utf-8 -*- # Wind clear raise # 2017/3/5 下午2:34 import socket im ...
- 变量为空代表false
name = ''#名字为空即代表False while not name:#not name=False即 真,将执行循环体 print('Enter your name:') name = inp ...
- JVM探秘3---垃圾回收机制详解
众所周知,Java有自己的垃圾回收机制,它可以有效的释放系统资源,提高系统的运行效率.那么它是怎么运行的呢,这次就来详细解析下Java的垃圾回收 1.什么是垃圾? 垃圾回收回收的自然是垃圾,那么jav ...
- flask用宏渲染表单模板时,表单提交后,如果form.validate_on_submit()返回的是false的可能原因
flask用宏渲染表单模板时,表单提交后,提交的内容符合DataRequired()校验, 但是form.validate_on_submit()返回的是False, 原因可能是表单模板中的<f ...
- JavaScript使用localStorage缓存Js和css文件
对于WebApp来说,将js css文件缓存到localstorage区可以减少页面在加载时与HTTP请求的交互次数,从而优化页面的加载时间.特别是当移端信号不好高延迟时优化效果还是很显见的 下面的代 ...
- localStorage单页面及不同页面监听变动
分析 H5本地存储有两个API,一个是Web Storage,还有一个是Web SQL.不管是哪一个,都是基于JavaScript语言来使用,而Web Storage提供了两种存储类型 API: s ...