洛谷 P1471 方差

2021-08-07 17:19:46 字數 2384 閱讀 9431

題目背景

滾粗了的hansbug在收拾舊數學書,然而他發現了什麼奇妙的東西。

題目描述

蒟蒻hansbug在一本數學書裡面發現了乙個神奇的數列,包含n個實數。他想算算這個數列的平均數和方差。

輸入輸出格式

輸入格式:

第一行包含兩個正整數n、m,分別表示數列中實數的個數和操作的個數。

第二行包含n個實數,其中第i個實數表示數列的第i項。

接下來m行,每行為一條操作,格式為以下兩種之一:

操作1:1 x y k ,表示將第x到第y項每項加上k,k為一實數。

操作2:2 x y ,表示求出第x到第y項這一子數列的平均數。

操作3:3 x y ,表示求出第x到第y項這一子數列的方差。

輸出格式:

輸出包含若干行,每行為乙個實數,即依次為每一次操作2或操作3所得的結果(所有結果四捨五入保留4位小數)。

輸入輸出樣例

輸入樣例#1:

5 5

1 5 4 2 3

2 1 4

3 1 5

1 1 1 1

1 2 2 -1

3 1 5

輸出樣例#1:

3.0000

2.0000

0.8000

說明

樣例說明:

資料規模:

//對於維護平均值這個東西,線段樹是小菜一碟,隨便你怎麼搞

//然後對於方差;她有個公式的:

//s=[(a-z)2+(b-z)2+(c-z)2+(d-z)2+(e-z)2...]/n(z為平均數)

//s=[區間平方和-2*n*平均數^2+n*平均數^2]/n;

//s=[區間平方和-n*平均數2]/n;

//所以維護個平方和就好了;

//然後,平方和怎麼區間加呢?

//她也有個公式:

//(a+p)^2+(b+p)^2+(c+p)^2+(d+p)^2+(e+p)^2

//=以前平方和+(2*p*(z*n)+n*p*p);

//綜上所述,對於方差的維護只維護乙個區間平方和就可以了

#include

#include

#include

using

namespace

std;

#define maxn 100050

#define inf 0

struct segment_treetre[maxn<<2];

inline

void update(int u)

#define lc u<<1

#define rc u<<1|1

inline

void pushdown(int u)

void build(int u,int l,int r)

int mid=l+r>>1;

build(u<<1,l,mid),build(u<<1|1,mid+1,r);

update(u);

}void modify(int u,int l,int r,double k)

if(tre[u].lazy!=inf) pushdown(u);

int mid=(tre[u].l+tre[u].r)>>1;

if(r<=mid) modify(u<<1,l,r,k);

else

if(l>mid) modify(u<<1|1,l,r,k);

else modify(u<<1,l,mid,k),modify(u<<1|1,mid+1,r,k);

update(u);

}double query(int u,int l,int r,int opt)

if(tre[u].lazy!=inf) pushdown(u);

int mid=tre[u].l+tre[u].r>>1;

if(l>mid) return query(u<<1|1,l,r,opt);

else

if(r<=mid) return query(u<<1,l,r,opt);

else

return query(u<<1,l,mid,opt)+query(u<<1|1,mid+1,r,opt);

}int main()

}return

0;}

洛谷P1471 方差

題目描述 蒟蒻hansbug在一本數學書裡面發現了乙個神奇的數列,包含 n 個實數。他想算算這個數列的平均數和方差。輸入輸出格式 輸入格式 第一行包含兩個正整數 n m 分別表示數列中實數的個數和操作的個數。第二行包含 n 個實數,其中第 i 個實數表示數列的第 i 項。接下來m行,每行為一條操作,...

洛谷 P1471 方差

蒟蒻hansbug在一本數學書裡面發現了乙個神奇的數列,包含n個實數。他想算算這個數列的平均數和方差。那麼只要維護區間平方和,就可以求方差了。區間平方和,恩,push down稍微改一下即可。注意精度問題。include define n int 1e6 define ll long long us...

洛谷 P1471 方差

區間加,區間查詢,顯然的線段樹 分塊 說實話第一眼看到這個題的時候我是很懵的 線段樹每個區間要維護什麼呢?我們定義 sum sum limits n a i a 1 a 2 ldots a n qquad quad pow sum limits n a i 2 a 1 2 a 2 2 ldots a...