題目背景
滾粗了的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...