当前位置: 首页 > wzjs >正文

做一个响应式网站价格网站后期维护合同

做一个响应式网站价格,网站后期维护合同,做网站可以卖别的牌子的产品吗,烟台网站建设学校题目背景 滚粗了的 HansBug 在收拾旧数学书,然而他发现了什么奇妙的东西。 题目描述 蒟蒻 HansBug 在一本数学书里面发现了一个神奇的数列,包含 N 个实数。他想算算这个数列的平均数和方差。 输入格式 第一行包含两个正整数 N,M,分别表示…

题目背景

滚粗了的 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

说明/提示

关于方差:对于一个有 n 项的数列 A,其方差 s2 定义如下:

s2=n1​i=1∑n​(Ai​−A)2

其中 A 表示数列 A 的平均数,Ai​ 表示数列 A 的第 i 项。

样例说明:

操作步骤输入内容操作要求数列输出结果说明
0--1 5 4 2 3--
12 1 4求 [1,4] 内所有数字的平均数1 5 4 2 33.0000平均数 =(1+5+4+2)÷4=3.0000
23 1 5求 [1,5] 内所有数字的方差1 5 4 2 32.0000平均数 =(1+5+4+2+3)÷5=3,方差 =((1−3)2+(5−3)2+(4−3)2+(2−3)2+(3−3)2)÷5=2.0000
31 1 1 1将 [1,1] 内所有数字加 12 5 4 2 3--
41 2 2 -1将 [2,2] 内所有数字加 −12 4 4 2 3--
53 1 5求 [1,5] 内所有数字的方差2 4 4 2 30.8000平均数 =(2+4+4+2+3)÷5=3,方差 =((2−3)2+(4−3)2+(4−3)2+(2−3)2+(3−3)2)÷5=0.8000

数据规模:

数据点NM备注
1∼3N≤8M≤15-
4∼7N≤105M≤105不包含操作 3
8∼10N≤105M≤105

-

代码实现;

#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;

struct SegmentTreeNode {
    int left, right;         // 区间左右端点
    double sum;              // 区间和
    double squareSum;       // 区间平方和
    SegmentTreeNode *leftChild, *rightChild;
    
    SegmentTreeNode(int l, int r) : left(l), right(r), sum(0), squareSum(0) {
        leftChild = NULL;    // 使用NULL替代nullptr
        rightChild = NULL;   // 使用NULL替代nullptr
    }
};

// 构建线段树
void build(SegmentTreeNode* node, const vector<double>& arr) {
    if (node->left == node->right) {
        node->sum = arr[node->left - 1];
        node->squareSum = arr[node->left - 1] * arr[node->left - 1];
        return;
    }
    
    int mid = (node->left + node->right) / 2;
    node->leftChild = new SegmentTreeNode(node->left, mid);
    node->rightChild = new SegmentTreeNode(mid + 1, node->right);
    
    build(node->leftChild, arr);
    build(node->rightChild, arr);
    
    node->sum = node->leftChild->sum + node->rightChild->sum;
    node->squareSum = node->leftChild->squareSum + node->rightChild->squareSum;
}

// 区间更新:将[L, R]区间内的每个数加k
void update(SegmentTreeNode* node, int L, int R, double k) {
    if (node->right < L || node->left > R) return;
    if (L <= node->left && node->right <= R) {
        // 区间完全包含,更新和与平方和
        node->sum += k * (node->right - node->left + 1);
        node->squareSum += 2 * k * node->sum - k * k * (node->right - node->left + 1);
        return;
    }
    
    update(node->leftChild, L, R, k);
    update(node->rightChild, L, R, k);
    
    node->sum = node->leftChild->sum + node->rightChild->sum;
    node->squareSum = node->leftChild->squareSum + node->rightChild->squareSum;
}

// 区间查询:查询[L, R]的和与平方和
void query(SegmentTreeNode* node, int L, int R, double& sum, double& squareSum) {
    if (node->right < L || node->left > R) return;
    if (L <= node->left && node->right <= R) {
        sum += node->sum;
        squareSum += node->squareSum;
        return;
    }
    
    query(node->leftChild, L, R, sum, squareSum);
    query(node->rightChild, L, R, sum, squareSum);
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);              // 用0替代nullptr
    cout << fixed << setprecision(4);
    
    int n, m;
    cin >> n >> m;
    
    vector<double> arr(n);
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    
    // 构建线段树
    SegmentTreeNode* root = new SegmentTreeNode(1, n);
    build(root, arr);
    
    // 处理操作
    for (int i = 0; i < m; i++) {
        int op;
        cin >> op;
        
        if (op == 1) {
            int x, y;
            double k;
            cin >> x >> y >> k;
            update(root, x, y, k);
        } else if (op == 2) {
            int x, y;
            cin >> x >> y;
            double sum = 0, squareSum = 0;
            query(root, x, y, sum, squareSum);
            double average = sum / (y - x + 1);
            cout << average << endl;
        } else if (op == 3) {
            int x, y;
            cin >> x >> y;
            double sum = 0, squareSum = 0;
            query(root, x, y, sum, squareSum);
            int count = y - x + 1;
            double average = sum / count;
            double variance = (squareSum - count * average * average) / count;
            cout << variance << endl;
        }
    }
    
    return 0;
}

http://www.dtcms.com/wzjs/823257.html

相关文章:

  • 数据库电影网站源码杭州建设工程信息网站
  • 怎么做会员自动售卡网站营销到底是干嘛的
  • 自己免费怎么制作网站长沙学网页设计的学校有哪些
  • 电子商务网站概念华强方特网站开发
  • 河南网站建设技术公司手机怎么做程序
  • 江苏专业网站建设公司电话计算机网络技术主要就业方向
  • 贵阳网站设计报价怎么查网站有没有做404
  • 全媒体门户网站建设方案wordpress主题仿虎嗅
  • asp网站漏洞修复插件茶叶网页设计图片
  • 企业网站建设有哪些书籍游戏代理是做什么的
  • 网站系统正在升级维护河北做网站公司那家好
  • 政务门户网站建设规范网站做优化一开始怎么做
  • 做名片用什么网站昆明hph网站建设
  • 大桥石化集团网站谁做的网站备案审核要多久
  • 各地网站备案深圳网站建设一般多少钱
  • 技术支持 东莞网站建设给别人做网站打电话推销
  • 网站开发公司介绍网站开发量
  • 随州市住房和城乡建设部网站h5手机端网站开发
  • 网站数据库 mysql建设网站我们重中之重-用户体验
  • 龙拓网站建设制作效果图的软件
  • 浙江建设职业技术学院提前招网站网站 head关键字 密度 多少字
  • 淄博网站seo价格深圳的设计网站公司
  • 太原建设厅网站移动端应用
  • 思途旅游网站建设网站建设交流群
  • 西南能矿建设工程公司网站网站维护的工作内容
  • 永久免费手机建站呼叫中心十大外包公司
  • 网站建设 生产西安网站建设项目
  • 无锡网站建设企业排名青岛模板化网站建设
  • 广州网站制作公司门户网站的门户思维有什么特点
  • 重庆市做网站的公司各大网站地区是怎样和做的