[题目] Luogu P3707 [SDOI2017]相关分析
| TFRAC | FRAC | DFRAC |
|---|---|---|
| \(\tfrac{\sum}{1}\) | \(\frac{\sum}{1}\) | \(\dfrac{\sum}{1}\) |
\[\bar{x}=\frac{1}{R-L+1}\sum x_i\]
\[\bar{y}=\frac{1}{R-L+1}\sum y_i\]
\[\hat{a}=\dfrac{\sum_{i=L}^R(x_i-\bar{x})(y_i-\bar{y})}{\sum_{i=L}^R(x_i-\bar{x})^2}\]
记\(\sum = \sum_{i=L}^{R}\)
Query
\[Ans=\dfrac{ \sum x_iy_i-\bar{x}\sum y_i-\bar{y}\sum x_i+\sum \bar{x}\bar{y}}{\sum x_i^2-2\bar{x}\sum x_i+\sum\bar{x^2}}\]
\[=\dfrac{ \sum x_iy_i-\frac{1}{R-L+1}\sum x_i\sum y_i-\frac{1}{R-L+1}\sum y_i\sum x_i+\sum \frac{1}{R-L+1}\sum x_i\frac{1}{R-L+1}\sum y_i}{\sum x_i^2-\frac{1}{R-L+1}2\sum x_i\sum x_i+\sum (\frac{1}{R-L+1}\sum x_i)^2}\]
\[=\dfrac{ \sum x_iy_i-\frac{\sum x_i\sum y_i}{R-L+1}}{\sum x_i^2-\frac{(\sum x_i)^2}{R-L+1}}\]
下传Tag:先\(upd\)后\(addX \quad addY\)
维护值:\(t1=\sum x\) | \(t2=\sum y\) | \(t3=\sum xy\) | \(t4=\sum x^2\)
维护Tag:\(addX \quad addY\)
\[\hat{a}=\dfrac{t3-\frac{t1t2}{R-L+1}}{t4-\frac{t1^2}{R-L+1}}\]
Add
\[\Delta x = S \quad \Delta y= T\]
\[\sum (x + S) = \sum x_i+(R-L+1)S \]
\[\sum(y+T)=\sum y_i+(R-L+1) T\]
\[\sum(x+S)(y+T)=\sum(xy+Sy+Tx+ST)=\sum xy+S\sum y+T\sum x+(R-L+1)ST\]
\[\sum(x+S)^2=\sum x^2+2S\sum x+(R-L+1)S^2\]
下传Tag:先\(upd\)后\(addX \quad addY\)
顺序:先\(t3,t4\)后\(t1,t2\)
Update
自然数平方和:\[\sum_{i=1}^ni=\frac{n(n+1)(2n+1)}{6}\]
1.\(\forall i \in [L,R]\quad x_i=i\ \ y_i=i\)
\[\sum x=\sum y = \sum i = \frac{(R-L+1)(R+L)}{2}\]
\[\sum x^2 = \sum xy = \sum i ^2 = \sum_{i=1}^R i^2-\sum_{i=1}^{L-1}i^2=\frac{R(R+1)(2R+1)}{6}-\frac{L(L-1)(2L-1)}{6}\]
下传Tag:先\(upd\)后\(addX \quad addY\)
清空Tag \(addX \quad addY\)
标记Tag \(upd\)
2.ADD L R S T
Code
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
const int N = 100005;
int n, m;
double X[N], Y[N];
struct Segment_Tree
{
#define ls (p << 1)
#define rs (p << 1 | 1)
#define mid ((l + r) >> 1)
bool upd[N << 2];
double x[N << 2], y[N << 2];
double t1[N << 2], t2[N << 2], t3[N << 2], t4[N << 2];
inline void pushup(ll p)
{
t1[p] = t1[ls] + t1[rs];
t2[p] = t2[ls] + t2[rs];
t3[p] = t3[ls] + t3[rs];
t4[p] = t4[ls] + t4[rs];
}
inline void pushdown(ll p, ll l, ll r)
{
double L = mid - l + 1, R = r - mid;
if(upd[p]) {
double Ll = l, Lr = mid, Rl = mid + 1, Rr = r;
t1[ls] = t2[ls] = (Lr - Ll + 1.0) * (Lr + Ll) / 2.0;
t1[rs] = t2[rs] = (Rr - Rl + 1.0) * (Rr + Rl) / 2.0;
t3[ls] = t4[ls] = Lr * (Lr + 1.0) * (2.0 * Lr + 1.0) / 6.0 - Ll * (Ll - 1.0) * (2.0 * Ll - 1.0) / 6.0;
t3[rs] = t4[rs] = Rr * (Rr + 1.0) * (2.0 * Rr + 1.0) / 6.0 - Rl * (Rl - 1.0) * (2.0 * Rl - 1.0) / 6.0;
upd[ls] = upd[rs] = upd[p]; upd[p] = 0;
x[ls] = x[rs] = y[ls] = y[rs] = 0;
}
if(x[p] || y[p]) {
t3[ls] += x[p] * t2[ls] + y[p] * t1[ls] + L * x[p] * y[p];
t3[rs] += x[p] * t2[rs] + y[p] * t1[rs] + R * x[p] * y[p];
}
if(x[p]) {
t4[ls] += 2 * x[p] * t1[ls] + L * x[p] * x[p];
t4[rs] += 2 * x[p] * t1[rs] + R * x[p] * x[p];
t1[ls] += L * x[p];
t1[rs] += R * x[p];
x[ls] += x[p];
x[rs] += x[p];
x[p] = 0;
}
if(y[p]) {
t2[ls] += (double)L * y[p];
t2[rs] += (double)R * y[p];
y[ls] += y[p];
y[rs] += y[p];
y[p] = 0;
}
}
void build(ll p, ll l, ll r)
{
if(l == r) {
t1[p] = X[l];
t2[p] = Y[l];
t3[p] = X[l] * Y[l];
t4[p] = X[l] * X[l];
return;
}
upd[p] = x[p] = y[p] = 0;
build(ls, l, mid);
build(rs, mid + 1, r);
pushup(p);
}
void add(ll p, ll l, ll r, ll ql, ll qr, double S, double T)
{
if(ql <= l && r <= qr) {
double len = (r - l + 1);
t3[p] += S * t2[p] + T * t1[p] + len * S * T;
t4[p] += 2 * S * t1[p] + len * S * S;
t1[p] += len * S;
t2[p] += len * T;
x[p] += S; y[p] += T;
return;
}
pushdown(p, l, r);
if(ql <= mid) add(ls, l, mid, ql, qr, S, T);
if(qr > mid) add(rs, mid + 1, r, ql, qr, S, T);
pushup(p);
}
void update(ll p, ll l, ll r, ll ql, ll qr) {
if(ql <= l && r <= qr) {
t1[p] = t2[p] = (double)(r - l + 1.0) * (l + r) / 2.0;
t3[p] = t4[p] = (double)r * (r + 1.0) * (2.0 * r + 1) / 6.0 - (double)l * (l - 1.0) * (2.0 * l - 1.0) / 6.0;
x[p] = y[p] = 0;
upd[p] = 1;
return;
}
pushdown(p, l, r);
if(ql <= mid) update(ls, l, mid, ql, qr);
if(qr > mid) update(rs, mid + 1, r, ql, qr);
pushup(p);
}
double query(ll p, ll l, ll r, ll ql, ll qr, ll f) {
if(ql <= l && r <= qr) {
if(f == 1) return t1[p];
if(f == 2) return t2[p];
if(f == 3) return t3[p];
if(f == 4) return t4[p];
}
pushdown(p, l, r);
double res = 0;
if(ql <= mid) res += query(ls, l, mid, ql, qr, f);
if(qr > mid) res += query(rs, mid + 1, r, ql ,qr, f);
return res;
}
#undef ls
#undef rs
#undef mid
};
struct Segment_Tree Tree;
int main()
{
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i++) scanf("%lf", &X[i]);
for(int i = 1; i <= n; i++) scanf("%lf", &Y[i]);
Tree.build(1, 1, n);
int opt, L, R; double S, T;
while(m--)
{
scanf("%d", &opt);
if(opt == 1)
{
scanf("%d %d", &L, &R);
double t1 = Tree.query(1, 1, n, L, R, 1);
double t2 = Tree.query(1, 1, n, L, R, 2);
double t3 = Tree.query(1, 1, n, L, R, 3);
double t4 = Tree.query(1, 1, n, L, R, 4);
double a_ = (t3 - (t1 * t2) / (double)(R - L + 1)) / (t4 - (t1 * t1) / (double)(R - L + 1));
printf("%.10lf\n", a_);
}
else if(opt == 2)
{
scanf("%d %d %lf %lf", &L, &R, &S, &T);
Tree.add(1, 1, n, L, R, S, T);
}
else if(opt == 3)
{
scanf("%d %d %lf %lf", &L, &R, &S, &T);
Tree.update(1, 1, n, L, R);
Tree.add(1, 1, n, L, R, S, T);
}
}
return 0;
}
[题目] Luogu P3707 [SDOI2017]相关分析的更多相关文章
- luogu P3707 [SDOI2017]相关分析
传送门 对于题目要求的东西,考虑拆开懒得拆了 ,可以发现有\(\sum x\sum y\sum x^2\sum xy\)四个变量影响最终结果,考虑维护这些值 下面记\(l,r\)为区间两端点 首先是区 ...
- [Luogu 3707] SDOI2017 相关分析
[Luogu 3707] SDOI2017 相关分析 前言 Capella 和 Frank 一样爱好天文学. 她常在冬季的夜晚,若有所思地望着东北方上空的五边形中,最为耀眼的一个顶点. 那一抹金黄曾带 ...
- P3707 [SDOI2017]相关分析
P3707 [SDOI2017]相关分析 线段树裸题?但是真的很麻烦QAQ 题目给的式子是什么不用管,大力拆开,就是\(\frac{\sum x_iy_i-\overline xy_i-\overli ...
- 洛谷P3707 [SDOI2017]相关分析(线段树)
题目描述 Frank对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. Frank不仅喜欢观测,还喜欢分析观测到的数据.他经常分析两个 ...
- AC日记——[SDOI2017]相关分析 洛谷 P3707
[SDOI2017]相关分析 思路: 裸线段树: (玄学ac): 代码: #include <bits/stdc++.h> using namespace std; #define max ...
- BZOJ4817 SDOI2017 相关分析
4821: [Sdoi2017]相关分析 Time Limit: 10 Sec Memory Limit: 128 MBSec Special Judge Description Frank对天文 ...
- 【BZOJ4821】[Sdoi2017]相关分析 线段树
[BZOJ4821][Sdoi2017]相关分析 Description Frank对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. ...
- [Sdoi2017]相关分析 [线段树]
[Sdoi2017]相关分析 题意:沙茶线段树 md其实我考场上还剩一个多小时写了40分 其实当时写正解也可以吧1h也就写完了不过还要拍一下 正解代码比40分短2333 #include <io ...
- 【BZOJ4821】[SDOI2017]相关分析(线段树)
[BZOJ4821][SDOI2017]相关分析(线段树) 题面 BZOJ 洛谷 题解 看看询问要求的东西是什么.把所有的括号拆开,不难发现要求的就是\(\sum x,\sum y,\sum xy,\ ...
随机推荐
- 使用Asp.Net Core MVC 开发项目实践[第五篇:缓存的使用]
项目中我们常常会碰到一些数据,需要高频率用到但是又不会频繁变动的这类,我们就可以使用缓存把这些数据缓存起来(比如说本项目的导航数据,帖子频道数据). 我们项目中常用到有Asp.Net Core 本身提 ...
- JWT 从入门到精通
什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点 ...
- [牛客小白月赛4 H] 相邻的糖果
Description 有n个盒子摆成一排,每个盒子内都有ai个糖果. 现在你可以执行以下操作: ·你可以选择任意一个盒子,在选择的盒子内吃掉一个糖果. 对你的要求如下: ·任何m个相邻的盒子内糖果数 ...
- /proc文件系统(二):/proc/<pid>/stat
0. 前言 /proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间. 它以文件系统的方式为内核与进程提供通信的接口.用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某 ...
- [转]Angular4---部署---将Angular项目部署到IIS上
本文转自:https://www.cnblogs.com/kingkangstudy/p/7699710.html Angular项目部署到一个IIS服务器上 1.安装URL rewrite组件: 网 ...
- ef学习一
学习内容:https://www.cnblogs.com/5ishare/p/5801229.html 注意点: 1.NuGet程序包引入ef,使用DbSet<>必须引入ef.本例EFCo ...
- 在服务器上搭建wordpress个人博客 php7.2+nginx+mysql+wordperss
买了台VPS,准备搭建一个博客.用过几个博客框架还是觉得Wordpress好用.主题多,插件也非常的便利,而且大多还免费开源.搭建也很简单,其实安装好php+mysql+nginx+wordpress ...
- VB.NET网络是否联通Function
''' <summary> ''' IP Ping ''' </summary> ''' <param name="strIpOrDName& ...
- Python 类的特殊成员介绍
类的成员有两种形式 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法,私有成员命名时,前两个字符是下划线. class Foo: def __init__(self, name, age ...
- Java 开源博客 Solo 1.8.0 发布 - 改进文件上传
本次发布主要是更新了编辑器,使其更好地支持文件上传.(1.8.0 版本变更记录请看这里) 我们的 Markdown 编辑器: 另外,我们对 HTTPS 的支持也更完善了,欢迎大家试用! 简介 Solo ...