Luogu P1471 方差

題目傳送門

開了十倍空間才過是什么鬼?該不會我線段樹炸了吧……
細思極恐


平均數都會求,維護區間和,到時候除一下就好了。

方差的求法如下
2264.png(用的Luogu的圖片)
因為要維護一個平方,我們可以考慮使用van♂完全平方公式將它拆開,這樣只用線段樹維護區間和和區間平方和就可以了。
對于區間修改,同樣使用完全平方公式。

要注意的一點是,修改時,要先修改平方和,再修改和,因為我們修改平方和時要用到區間和。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define ls p<<1
#define rs p<<1|1
#define mid ((l+r)>>1)
using namespace std;
struct zzz{double sum,pf;
}tree[1000010<<2];
double tag[1000010<<2],a[1000010];
inline void up(int p){tree[p].sum=tree[ls].sum+tree[rs].sum;tree[p].pf=tree[ls].pf+tree[rs].pf;
}
void build(int l,int r,int p){if(l==r){tree[p].sum=a[l];tree[p].pf=a[l]*a[l];return ;}build(l,mid,ls); build(mid+1,r,rs);up(p);
}
inline void down(int l,int r,int p){
//用完全平方公式修改平方和tree[ls].pf+=2*tree[ls].sum*tag[p]+tag[p]*tag[p]*(mid-l+1);tree[rs].pf+=2*tree[rs].sum*tag[p]+tag[p]*tag[p]*(r-mid);
//維護區間和tree[ls].sum+=tag[p]*(mid-l+1);tree[rs].sum+=tag[p]*(r-mid);tag[ls]+=tag[p]; tag[rs]+=tag[p]; tag[p]=0;
}
void update(int l,int r,int p,int nl,int nr,double k){if(l>=nl&&r<=nr){tree[p].pf+=2*tree[p].sum*k+k*k*(r-l+1);tree[p].sum+=k*(r-l+1);tag[p]+=k;return ;}down(l,r,p);if(nl<=mid) update(l,mid,ls,nl,nr,k);if(nr>mid) update(mid+1,r,rs,nl,nr,k);up(p);
}
double query(int l,int r,int p,int nl,int nr){double ans=0;down(l,r,p);if(l>=nl&&r<=nr) return tree[p].sum;if(nl<=mid) ans+=query(l,mid,ls,nl,nr);if(nr>mid) ans+=query(mid+1,r,rs,nl,nr);return ans;
}
double query2(int l,int r,int p,int nl,int nr){double ans=0;down(l,r,p);if(l>=nl&&r<=nr) return tree[p].pf;if(nl<=mid) ans+=query2(l,mid,ls,nl,nr);if(nr>mid) ans+=query2(mid+1,r,rs,nl,nr);return ans;
}
int read(){int k=0,f=1; char c=getchar();for(;c<'0'||c>'9';c=getchar())if(c=='-') f=-1;for(;c>='0'&&c<='9';c=getchar())k=k*10+c-48;return k*f;
}
int main(){int n=read(),m=read();for(int i=1;i<=n;i++) scanf("%lf",&a[i]);build(1,n,1);for(int i=1;i<=m;i++){int opt=read(),l=read(),r=read();if(opt==1){double k; scanf("%lf",&k);update(1,n,1,l,r,k);}if(opt==2){printf("%.4lf\n",query(1,n,1,l,r)/(r-l+1));}if(opt==3){double sum=query(1,n,1,l,r);double pj=sum/(r-l+1);double pf=query2(1,n,1,l,r);printf("%.4lf\n",(pf-2*sum*pj+pj*pj*(r-l+1))/(r-l+1));}}return 0;
}

轉載于:https://www.cnblogs.com/wxl-Ezio/p/9911258.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249086.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249086.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249086.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python學習day17 遞歸函數

遞歸函數 http://www.cnblogs.com/Eva-J/articles/7205734.html def age(n):if n 4:return 40elif n >0 and n < 4:return age(n1) 2print(age(1)) # 46 只要寫遞歸函數&#xff0c;必須要有結束條件。 二分法查找 l [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,5…

2018年最好用的20個Bootstrap網站模板

Bootstrap是目前最受歡迎也是最簡潔的建站方式之一&#xff0c;尤其是伴隨移動端的發展&#xff0c;響應式設計已經毫無疑問成為了網頁設計的趨勢&#xff0c;網站建設要求兼容手機端已經是一種剛需&#xff0c;也成為提升用戶體驗的一種必要方式。但這無疑會加大設計師和前端人…

bit、byte、位、字節、漢字、字符之間的區別

package com.suypower.chengyu.test; public class ByteTest { /** * byte 8 bits -128 - 127 * 1 bit 1 二進制數據 * 1 byte 8 bit * 1 字母 1 byte 8 bit(位) * 1 漢字 2 byte 16 bit */ public static void main(String[] args) { // TODO Auto-generated method st…

Android SDK 2.3/3.0/4.0/4.2 下載與安裝教程

Eclipse下搭建Android開發環境教程&#xff1a;http://dev.son1c.com/show/1253.html Google已經發布了Android SDK 4.2版本.下面給朋友們介紹一下安裝 Android 模擬器 Emulator模擬器的方法: 1、首先確定安裝了Java JDK&#xff0c;如果沒有&#xff0c;可以去http://www.ora…

PMP:4.項目整合管理

內容中包含 base64string 圖片造成字符過多&#xff0c;拒絕顯示轉載于:https://www.cnblogs.com/mapanguan/p/9916902.html

瀏覽器渲染原理與過程

一、瀏覽器如何渲染網頁 要了解瀏覽器渲染頁面的過程&#xff0c;首先得知道一個名詞——關鍵路徑渲染。關鍵渲染路徑&#xff08;Critical Rendering Path&#xff09;是指與當前用戶操作有關的內容。例如用戶在瀏覽器中打開一個頁面&#xff0c;其中頁面所顯示的東西就是當前…

css框架:五大css流行框架的總結-css教程-PHP中文網

本篇文章給大家帶來的內容是關于css框架&#xff1a;五大css流行框架的總結&#xff0c;有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對你有所幫助。 如今&#xff0c;CSS框架越來越受歡迎&#xff0c;可以說已經應用到每一個網站上了。作為開發工具…

第十四天

###數組&#xff1a;面向對象的方式創建&#xff1a;var arr01 new Array(1,2,3,"abc");直接創建&#xff1a;var arr02 [1,2,3,"abc"]alert (arr02.length);alert(arr02[3]);var arr03 [[1,2,3],["a","b","c","d&q…

【English Email】CIP payouts now in Workday

simplification簡化的[?s?mpl?f??ke??n] quota配額[?kwo?t?] regional區域的[?ri?d??nl] mechanics技工[m??kn?ks] annual年度的 [?nju?l] mid-year年中 [m?d j?r] bridge橋接[br?d?] Incentive激勵 [?n?sent?v] Due to the simplification of …

爬取網頁的通用代碼框架

import requests def getHTMLText(url)try:r requests.get(url,timeout30)r.raise_for_status()r.encoding r.apparent_encodingreturn r.textexcept:return "產生異常"if__name__ "__main__"url "http://www.baidu.com"print(getHTMLText(ur…

深入理解CSS盒模型 - 程序猿的程 - 博客園

深入理解CSS盒模型 本文是學習中傳思客在慕課網開的課程《前端跳槽面試必備技巧》的學習筆記。課程地址&#xff1a;https://coding.imooc.com/class/evaluation/129.html#Anchor。 如果你在面試的時候面試官讓你談談對盒模型的理解&#xff0c;你是不是不知從何談起。這種看似…

藍橋杯——機器人行走

某少年宮引進了一批機器人小車。可以接受預先輸入的指令&#xff0c;按指令行動。小車的基本動作很簡單&#xff0c;只有3種&#xff1a;左轉&#xff08;記為L&#xff09;&#xff0c;右轉&#xff08;記為R&#xff09;&#xff0c;向前走若干厘米&#xff08;直接記數字&am…

JavaWeb:腳本標識

腳本標識 一、JSP表達式 1、介紹 用于向頁面中輸出信息 2、語法格式 <% 表達式%>3、注意 在"<%"和""之間不允許有空格&#xff0c;但是在""后面的表達式之間可以有空格不僅可以插入到網頁中&#xff0c;還可以插入到HTML標記中&#xf…

線程死鎖問題

1 package com.demo.bingfa;2 3 /**4 * java并發編程中&#xff0c;死鎖的概念5 *6 * 我們啟用了兩個線程&#xff0c;分別搶占2個資源&#xff0c;但這兩個資源又分別被不同的對象&#xff08;字符串&#xff09;鎖住了。7 * 當第一個線程調用 resource1 方法&#xff0c;…

CSS的4個簡寫

CSS的4個簡寫 2010-12-13 18:50 聶微東 閱讀(1547) 評論(3) 編輯 收藏 1.background 簡寫屬性在一個聲明中設置所有的背景屬性: background-colorbackground-imagebackground-repeatbackground-attachmentbackground-position 例如: background: #444444 url(image.png…

spring boot 整合 (全)

參考: https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples轉載于:https://www.cnblogs.com/lshan/p/9924005.html

使用PM2搭建在線vue.js開發環境(以守護進程方式熱啟動)

項目以vue.jslayUI的作為前端開發技術棧&#xff0c;需要有一個在線的環境供項目成員實時查看效果&#xff0c;總不能每次都webpack打包發布后才能看到效果吧&#xff01;剛開始就簡單使用npm run dev命令熱啟動&#xff0c;但是shell命令窗口退出后&#xff0c;熱啟動也就失效…

微信小程序工具類

wechat-common-sdk ? 場景&#xff1a;目前工作中的項目需要包含并使用另一個項目。 也許是第三方庫&#xff0c;或者你獨立開發的&#xff0c;用于多個父項目的庫。 現在問題來了&#xff1a;你想要把它們當做兩個獨立的項目&#xff0c;同時又想在一個項目中使用另一個。 我…

zabbix實現mysql數據庫的監控

先來介紹zabbix中幾個常用的術語&#xff1a; 主機&#xff08;host&#xff09;&#xff1a; 要監控的網絡設備&#xff0c;可由ip或DNS名稱指定。 主機組&#xff08;host group&#xff09;&#xff1a; 主機的邏輯容器&#xff0c;可以包含主機和模板&#xff…

VSCode配合eslint進行JavaScript質量檢查

寫在開始前&#xff1a;如有不準確的地方希望大家提出&#xff0c;文章可以改知識不能錯。 創建一個項目 這里已node項目為例 npm init 根據提示填寫相關信息 安裝eslint npm install eslint --save也可以全局安裝 npm install eslint -g初始化 eslint文件 eslint --init執行命…