codevs 5967 [SDOI2017]相关分析

/*
WA://50分
last:(r-l+1)<-- (r-mid)
(r-l+1)<-- (mid-l+1)
now:int mid=l+r>>1;
tr[lc].sxy+=tr[lc].sx*addy[k]+tr[lc].sy*addx[k]+(real)(mid-l+1)*addx[k]*addy[k];
tr[lc].sx2+=(real)(mid-l+1)*addx[k]*addx[k]+2.0*tr[lc].sx*addx[k];
tr[lc].sx+=(real)(mid-l+1)*addx[k];
tr[lc].sy+=(real)(mid-l+1)*addy[k]; tr[rc].sxy+=tr[rc].sx*addy[k]+tr[rc].sy*addx[k]+(real)(r-mid)*addx[k]*addy[k];
tr[rc].sx2+=(real)(r-mid)*addx[k]*addx[k]+2.0*tr[rc].sx*addx[k];
tr[rc].sx+=(real)(r-mid)*addx[k];
tr[rc].sy+=(real)(r-mid)*addy[k];
addx[k]=addy[k]=0;
*/
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<iostream>
#define pf(x)((x)*(x))
#define lc k<<1
#define rc k<<1|1
#define setfile(x) freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);
using namespace std;
typedef double real;
const real inf=2e9;
const int N=2e5+;
const int M=1e3+;
int n,m,bsize;
real ax[N],ay[N];
struct sgt{real sx,sy,sxy,sx2;}tr[N<<];
real addx[N<<],addy[N<<];
real setx[N<<],sety[N<<];
bool tag[N<<];
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
sgt operator +(const sgt &a,const sgt &b){
sgt c;
c.sx=a.sx+b.sx;
c.sy=a.sy+b.sy;
c.sxy=a.sxy+b.sxy;
c.sx2=a.sx2+b.sx2;
return c;
}
inline real sumsq1(real l,real r){return (l+r)*(r-l+)/;}
inline real sumsq2(real l,real r){return (r*(r+)*(r*+)-(l-)*l*(l*-))/;}
void updata(int k){
tr[k].sx=tr[lc].sx+tr[rc].sx;
tr[k].sy=tr[lc].sy+tr[rc].sy;
tr[k].sxy=tr[lc].sxy+tr[rc].sxy;
tr[k].sx2=tr[lc].sx2+tr[rc].sx2;
}
void build(int k,int l,int r){
// tag[k]=0;
if(l==r){
tr[k].sx=ax[l];
tr[k].sy=ay[l];
tr[k].sxy=ax[l]*ay[l];
tr[k].sx2=ax[l]*ax[l];
return ;
}
int mid=l+r>>;
build(lc,l,mid);
build(rc,mid+,r);
updata(k);
}
void pushdown(int k,int l,int r){
if(l==r) return ;
int mid=l+r>>;
if(addx[k]!=||addy[k]!=){
if(tag[lc]){
setx[lc]+=addx[k];
sety[lc]+=addy[k];
}
else{
addx[lc]+=addx[k];
addy[lc]+=addy[k];
}
if(tag[rc]){
setx[rc]+=addx[k];
sety[rc]+=addy[k];
}
else{
addx[rc]+=addx[k];
addy[rc]+=addy[k];
}
int mid=l+r>>;
tr[lc].sxy+=tr[lc].sx*addy[k]+tr[lc].sy*addx[k]+(real)(mid-l+)*addx[k]*addy[k];
tr[lc].sx2+=(real)(mid-l+)*addx[k]*addx[k]+2.0*tr[lc].sx*addx[k];
tr[lc].sx+=(real)(mid-l+)*addx[k];
tr[lc].sy+=(real)(mid-l+)*addy[k]; tr[rc].sxy+=tr[rc].sx*addy[k]+tr[rc].sy*addx[k]+(real)(r-mid)*addx[k]*addy[k];
tr[rc].sx2+=(real)(r-mid)*addx[k]*addx[k]+2.0*tr[rc].sx*addx[k];
tr[rc].sx+=(real)(r-mid)*addx[k];
tr[rc].sy+=(real)(r-mid)*addy[k];
addx[k]=addy[k]=;
}
if(tag[k]){
tag[lc]=tag[rc]=;
setx[lc]=setx[k];
setx[rc]=setx[k];
sety[lc]=sety[k];
sety[rc]=sety[k]; real li1,li2,ri1,ri2;
li1=sumsq1(l,mid);
li2=sumsq2(l,mid);
ri1=sumsq1(mid+,r);
ri2=sumsq2(mid+,r);
tr[lc].sxy=setx[k]*sety[k]*(real)(mid-l+);
tr[lc].sx2=setx[k]*setx[k]*(real)(mid-l+); tr[lc].sx=setx[k]*(real)(mid-l+)+li1;
tr[lc].sy=sety[k]*(real)(mid-l+)+li1;
tr[lc].sxy+=li1*(setx[k]+sety[k])+li2;
tr[lc].sx2+=*li1*setx[k]+li2; tr[rc].sxy=setx[k]*sety[k]*(real)(r-mid);
tr[rc].sx2=setx[k]*setx[k]*(real)(r-mid);
tr[rc].sx=setx[k]*(real)(r-mid)+ri1;
tr[rc].sy=sety[k]*(real)(r-mid)+ri1;
tr[rc].sxy+=ri1*(setx[k]+sety[k])+ri2;
tr[rc].sx2+=*ri1*setx[k]+ri2;
tag[k]=;
} }
void change(int k,int l,int r,int x,int y,real s,real t){
if(l==x&&r==y){
tr[k].sxy+=tr[k].sx*t+tr[k].sy*s+(real)(r-l+)*s*t;
tr[k].sx2+=(real)(r-l+)*s*s+2.0*tr[k].sx*s;
tr[k].sx+=(real)(r-l+)*s;
tr[k].sy+=(real)(r-l+)*t;
if(tag[k]){
setx[k]+=s;
sety[k]+=t;
}
else{
addx[k]+=s;
addy[k]+=t;
}
return ;
}
pushdown(k,l,r);
int mid=l+r>>;
if(y<=mid) change(lc,l,mid,x,y,s,t);
else if(x>mid) change(rc,mid+,r,x,y,s,t);
else change(lc,l,mid,x,mid,s,t),change(rc,mid+,r,mid+,y,s,t);
updata(k);
}
void cover(int k,int l,int r,int x,int y,real s,real t){ if(l==x&&r==y){
real li1,li2;
li1=sumsq1(l,r);
li2=sumsq2(l,r);
tr[k].sxy=s*t*(real)(r-l+);
tr[k].sx2=s*s*(real)(r-l+);
tr[k].sx=s*(real)(r-l+)+li1;
tr[k].sy=t*(real)(r-l+)+li1;
tr[k].sxy+=li1*(s+t)+li2;
tr[k].sx2+=*li1*s+li2; tag[k]=;
setx[k]=s;
sety[k]=t;
addx[k]=addy[k]=;
return ;
}
pushdown(k,l,r);
int mid=l+r>>;
if(y<=mid) cover(lc,l,mid,x,y,s,t);
else if(x>mid) cover(rc,mid+,r,x,y,s,t);
else cover(lc,l,mid,x,mid,s,t),cover(rc,mid+,r,mid+,y,s,t);
updata(k);
}
sgt query(int k,int l,int r,int x,int y){
if(l==x&&r==y) return tr[k];
pushdown(k,l,r);
int mid=l+r>>;
if(y<=mid) return query(lc,l,mid,x,y);
else if(x>mid) return query(rc,mid+,r,x,y);
else return query(lc,l,mid,x,mid)+query(rc,mid+,r,mid+,y);
}
real find(int x,int y){
real X=,Y=,XY=,X2=,Xp,Yp,fz=,fm=,A;
sgt ans=query(,,n,x,y);int l=x,r=y;
X=ans.sx;
Y=ans.sy;
XY=ans.sxy;
X2=ans.sx2;
Xp=X/(real)(r-l+);
Yp=Y/(real)(r-l+);
fz=XY-X*Yp-Xp*Y+Xp*Yp*(r-l+);
fm=X2-2.0*X*Xp+Xp*Xp*(r-l+);
// if(fz==0||fm==0) return 0;
return fz/fm;
}
void work(){
build(,,n);
real s,t;
for(int i=,opt,x,y;i<=m;i++){
opt=read();x=read();y=read();
if(opt==) printf("%.7lf\n",find(x,y));
if(opt==) scanf("%lf%lf",&s,&t),change(,,n,x,y,s,t);
if(opt==) scanf("%lf%lf",&s,&t),cover(,,n,x,y,s,t);
}
}
int main(){
setfile(relative);
n=read();m=read();
for(int i=;i<=n;i++) scanf("%lf",&ax[i]);
for(int i=;i<=n;i++) scanf("%lf",&ay[i]);
work();
fclose(stdin);
fclose(stdout);
return ;
}
codevs 5967 [SDOI2017]相关分析的更多相关文章
- BZOJ4817 SDOI2017 相关分析
4821: [Sdoi2017]相关分析 Time Limit: 10 Sec Memory Limit: 128 MBSec Special Judge Description Frank对天文 ...
- [Sdoi2017]相关分析 [线段树]
[Sdoi2017]相关分析 题意:沙茶线段树 md其实我考场上还剩一个多小时写了40分 其实当时写正解也可以吧1h也就写完了不过还要拍一下 正解代码比40分短2333 #include <io ...
- [题目] Luogu P3707 [SDOI2017]相关分析
参考资料:[Luogu 3707] SDOI2017 相关分析 P3707 [SDOI2017]相关分析 TFRAC FRAC DFRAC \(\tfrac{\sum}{1}\) \(\frac{\s ...
- 【BZOJ4821】[SDOI2017]相关分析(线段树)
[BZOJ4821][SDOI2017]相关分析(线段树) 题面 BZOJ 洛谷 题解 看看询问要求的东西是什么.把所有的括号拆开,不难发现要求的就是\(\sum x,\sum y,\sum xy,\ ...
- [Luogu 3707] SDOI2017 相关分析
[Luogu 3707] SDOI2017 相关分析 前言 Capella 和 Frank 一样爱好天文学. 她常在冬季的夜晚,若有所思地望着东北方上空的五边形中,最为耀眼的一个顶点. 那一抹金黄曾带 ...
- 4821: [Sdoi2017]相关分析
4821: [Sdoi2017]相关分析 链接 分析: 大力拆式子,化简,然后线段树.注意精度问题与爆longlong问题. 代码: #include<cstdio> #include&l ...
- P3707 [SDOI2017]相关分析
P3707 [SDOI2017]相关分析 线段树裸题?但是真的很麻烦QAQ 题目给的式子是什么不用管,大力拆开,就是\(\frac{\sum x_iy_i-\overline xy_i-\overli ...
- AC日记——[SDOI2017]相关分析 洛谷 P3707
[SDOI2017]相关分析 思路: 裸线段树: (玄学ac): 代码: #include <bits/stdc++.h> using namespace std; #define max ...
- 【BZOJ4821】[Sdoi2017]相关分析 线段树
[BZOJ4821][Sdoi2017]相关分析 Description Frank对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. ...
随机推荐
- MySQL死锁原因分析
行级锁有三种模式: innodb 行级锁 record-level lock大致有三种:record lock, gap lock and Next-KeyLocks. record lock 锁住 ...
- WPF教程五:布局之Canvas面板
Canvas:画布面板 画布,用于完全控制每个元素的精确位置.他是布局控件中最为简单的一种,直接将元素放到指定位置,主要来布置图面.使用Canvas,必须指定一个子元素的位置(相对于画布),否则所有元 ...
- kettle中执行sql语句
一.直接执行sql,不添加任何参数 1.先找出执行sql语句的控件 2.打开控件,填写要执行的sql语句,主要下图中的红框中选项,后面会介绍各个选项的作用 二.执行sql,变量替换选项,变量指的是ke ...
- C语言 static静态变量
静态变量类型说明符是static. 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间 ...
- 【转】BMP图像文件格式
5.1 BMP图像文件格式 BMP图像文件格式是游戏中常用的图像资源文件格式,BMP图像文件起源早,程序员对BMP都比较熟悉,再加上BMP格式简单,读取和写入非常容易实现,所以无论Windows的还 ...
- Linux ad7606 驱动
Linux中已经移植好了ad7606,位于driver/staging/iio/adc/目录中.只要在板级文件中添加device中即可. 移植参考文档: https://wiki.analog.com ...
- 不错的源码演示:admin5源码
admin5源码官网:http://down.admin5.com/ 集资讯,源码,字体,itchat于一体的网站,可以下载喔! 实际项目中可以用得到.
- iotop详解
有时我们希望知道到底哪个进程产生了IO,这个时候就需要iotop这个工具了.它的输出和top命令类似,简单直观.官网:http://guichaz.free.fr/iotop/需要Python 2.5 ...
- ASP.NET MVC传递参数(model), 如何保持TempData的持久性
一看到此标题,相信你也会.因为路由是可以从URL地址栏传过去的. 但是Insus.NET不想在地址栏传递,还是一个条件是jQuery的Ajax进行POST的.Insus.NET不清楚别人是怎样处理的, ...
- ChemDraw教程之怎么连接ChemDraw结构
将两个独立的ChemDraw结构连接到一起是使用者学习操作ChemDraw绘制窗口内容的基本能力之一.为了进一步了解ChemDraw软件,本教程将具体为您介绍怎么连接ChemDraw结构. 一.化学结 ...