【JZOJ4231】寻找神格【分块】

弹簧管压力表设计报告 精密机械课程设计 弹簧管压力表设计报告 2020年5月1日 目 录 第一章 设计任务概述... 3 1.1 课程设计目的... 3 1.2 设计任务... 3 1.3 技术指标... 3 第二章 压力表概述... 4 2.1 机械式压力表的组成部分... 4 2.2 工作原理... 4 第三章 压力表设计... 5 3.1 弹簧管参数设计... 5 3.2 曲柄滑块机构设计... ... 阅读详情

题目大意:

一个长度为nnn的数列,要求支持444个操作:

  1. 0 x y0\ x\ y0 x y,表示将位置xxx的数字增加yyy。
  2. 1 x y z1\ x\ y\ z1 x y z,表示[x,y)[x,y)[x,y)中的数字全部加zzz。
  3. 2 x y2\ x\ y2 x y,表示询问x∼yx\sim yx∼y之间的数字和。
  4. 3 x y3\ x\ y3 x y,表示询问x∼yx\sim yx∼y之间的数字方差。

思路:

n≤100000n\leq 100000n≤100000,考虑分块。(个人感觉分块比线段树好打)。
对于222操作,很明显是需要在每个块内维护块内和。所以用sum[i]sum[i]sum[i]表示块iii中的数字和。
对于333操作,考虑将方差用完全平方公式拆开。
1n[(x1−ave)2+(x2−ave)2+...+(xn−ave)2]\frac{1}{n}[(x1-ave)^2+(x2-ave)^2+...+(xn-ave)^2]n1​[(x1−ave)2+(x2−ave)2+...+(xn−ave)2]
先不考虑1n\frac{1}{n}n1​。
(x1−ave)2+(x2−ave)2+...+(xn−ave)2(x1-ave)^2+(x2-ave)^2+...+(xn-ave)^2(x1−ave)2+(x2−ave)2+...+(xn−ave)2
拆开得
(x12−2×x1×ave)+(x22+2×x2×ave)+...+(xn2+2×xn×ave)(x1^2-2\times x1\times ave)+(x2^2+2\times x2\times ave)+...+(xn^2+2\times xn\times ave)(x12−2×x1×ave)+(x22+2×x2×ave)+...+(xn2+2×xn×ave)
去括号+整理得
x12+x22+...+xn2+2ave×x1+2ave×x2+...2ave×xn+ave2+ave2+...+ave2x1^2+x2^2+...+xn^2+2ave\times x1+2ave\times x2+...2ave\times xn+ave^2+ave^2+...+ave^2x12+x22+...+xn2+2ave×x1+2ave×x2+...2ave×xn+ave2+ave2+...+ave2

整理得
x12+x22+...+xn2+2ave(x1+x2+...+xn)+n×ave2x1^2+x2^2+...+xn^2+2ave(x1+x2+...+xn)+n\times ave^2x12+x22+...+xn2+2ave(x1+x2+...+xn)+n×ave2
将sum=x1+x2+...+xnsum=x1+x2+...+xnsum=x1+x2+...+xn带入得
x12+x22+...+xn2+2×ave×sum+n×ave2x1^2+x2^2+...+xn^2+2\times ave\times sum+n\times ave^2x12+x22+...+xn2+2×ave×sum+n×ave2
那么就再维护每个块的平方和就可以在O(n)O(\sqrt{n})O(n​)内求出答案了。
维护倒是不难,熟用完全平方公式+++注意细节即可。


代码:

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef long double ld;

const int N=100010;
const int M=350;
int n,Q,T,L[M],R[M],pos[N];
ll ans[M],add[M],sum[M],a[N],Read,f,x,y,z;
char ch;

ll read()
{
	Read=0;
	f=1;
	ch=getchar();
	while (ch<'0'||ch>'9')
	{
		if (ch=='-') f=-f;
		ch=getchar();
	}
	while (ch>='0'&&ch<='9')
		Read=(Read<<3)+(Read<<1)+ch-48,ch=getchar();
	return Read*f;
}

void change(int l,int r,ll z)  //修改
{
	int q=pos[l],p=pos[r];
	if (q==p)  //一个块暴力修改
	{
		for (register int i=l;i<=r;i++)
			ans[q]+=2*(a[i]+add[q])*z+z*z,a[i]+=z,sum[q]+=z;
		return;
	}
	for (register int i=l;i<=R[q];i++)
		ans[q]+=2*(a[i]+add[q])*z+z*z,a[i]+=z,sum[q]+=z;
	for (register int i=L[p];i<=r;i++)  //分开
		ans[p]+=2*(a[i]+add[p])*z+z*z,a[i]+=z,sum[p]+=z;
	for (register int i=q+1;i<p;i++)  //lazy修改
		add[i]+=z,ans[i]+=2*sum[i]*z+z*z*(R[i]-L[i]+1),sum[i]+=z*(R[i]-L[i]+1);
}

ll ask1(int l,int r)  //询问和
{
	int q=pos[l],p=pos[r];
	ll s=0;
	if (q==p)
	{
		for (register int i=l;i<=r;i++) s+=(ll)(a[i]+add[q]);  //暴力求和
		return s;
	}
	for (register int i=l;i<=R[q];i++) s+=(ll)(a[i]+add[q]);
	for (register int i=L[p];i<=r;i++) s+=(ll)(a[i]+add[p]);
	for (register int i=q+1;i<p;i++) s+=sum[i];
	return s;
}

ld ask2(int l,int r)  //询问方差
{
	int q=pos[l],p=pos[r];
	ll Ans=0,Sum=0;
	if (q==p)
	{
		for (register int i=l;i<=r;i++)  //暴力
			Sum+=a[i]+add[q];
		ld Ave=(ld)Sum/(ld)(r-l+1),s=0.0;
		for (register int i=l;i<=r;i++)
			s+=((ld)a[i]+(ld)add[q]-Ave)*((ld)a[i]+(ld)add[q]-Ave);
		return (ld)s/(ld)(r-l+1);
	}
	for (register int i=l;i<=R[q];i++)  //左边
	{
		Ans+=(a[i]+add[q])*(a[i]+add[q]);
		Sum+=a[i]+add[q];
	}
	for (register int i=L[p];i<=r;i++)  //右边
	{
		Ans+=(a[i]+add[p])*(a[i]+add[p]);
		Sum+=a[i]+add[p];
	}
	for (register int i=q+1;i<p;i++)  //中间直接利用lazy
	{
		Ans+=ans[i];
		Sum+=sum[i];
	}
	ld Ave=(ld)Sum/(ld)(r-l+1);
	return ((ld)Ans-2.0*(ld)Sum*Ave+(ld)(r-l+1)*Ave*Ave)/(ld)(r-l+1);
	//完全平方公式输出
}

int main()
{ 
	n=read(),Q=read();
	for (register int i=1;i<=n;i++)
		a[i]=read();
	T=sqrt(n);
	if (T*T<n) T++;
	for (register int i=1;i<=T;i++)
	{
		L[i]=R[i-1]+1;
		R[i]=min(i*T,n);
		for (register int j=L[i];j<=R[i];j++)
		{
			pos[j]=i;
			ans[i]+=a[j]*a[j];
			sum[i]+=a[j];
		}
	}
	while (Q--)
	{
		x=read();
		if (x==0)
		{
			x=read(),y=read();
			change(x,x,y);
		}
		else if (x==1)
		{
			x=read(),y=read(),z=read();
			change(x,y,z);
		}
		else if (x==2)
		{
			x=read(),y=read();
			printf("%lld\n",ask1(x,y));
		}
		else if (x==3)
		{
			x=read(),y=read();
			printf("%0.10Lf\n",ask2(x,y));
		}
		
	}
	return 0;
}
Qt入门教程【基础控件篇】QLineEdit输入框 QLineEdit输入框 阅读详情

相关推荐

Proteus仿真实战:用AT89C51+L298N搭建直流电机PID调速系统(附完整工程文件)

本文详细介绍了使用Proteus仿真平台结合AT89C51单片机和L298N驱动模块搭建直流电机PID闭环调速系统的全过程。从硬件选型、电路连接到PID算法实现与参数整定,提供了完整的开发指南和工程文件,帮助读者快速掌握闭环调速系统的设计与调试技巧。

weixin_28724661的博客 449

【JZOJ5260】【GDOI2018模拟8.12】区间第k小(分块)

DescriptionSolution首先这题离线的话是可以莫队套分块的,但是要求强制在线。那么我们只能考虑把莫队换成分块。 首先处理一个关于值域的块,然后求一个数组f[i,j,k]表示从下标第i块到第j块中满足在值域块是第k块,且这些数字出现次数小于等于w的有多少个,这个枚举两个端点,然后扫过去,用桶记录一下就好了。 然后再处理一个数组g[i,j]表示前i块中值为j的有多少个。 那么现在我们

Facico的博客 763

LLVM 编译器学习笔记之三十六-- 指令调度Instruction scheduling

1、参考Instruction scheduling in LLVM - 知乎,在中后端均存在指令调度 指令调度模型 2、在llvm12->llvm14 中Machine Instruction Scheduler有个patch增强了load/store指令的合并,也就是指令调度不仅仅只是改变指令的顺序,该优化类似gcc中的store-merge优化 .....................................................................

~ 飞 扬 的 天 空 ~ 5688

jzoj5382 [GDOI2018模拟9.21]数列 可持久化trie+分块

Description n,q&amp;lt;=20000 a[i]&amp;lt;=10^9 Solution 今天场外体验noi刺激战场,发现我只会做T1这种送分题(⊙ˍ⊙),还没切。果然人菜还是要多读书 首先做前缀和,变成两个点的问题 与异或相关可以考虑trie。一个暴力的做法就是建可持久化trie然后枚举查询最大异或和 看到n很小一个想法就是对区间分块,预处理f[i,j]表示块i...

olahiuj的博客 430

ESP32 CAM使用教程(入门级)

串口被占用,可以关闭其他使用到串口的界面;先将手机也连上wifi,然后使用手机浏览器打开这个IP地址,注意手机连接的wifi需要和开发板的wifi一致,也就是程序里自己修改的那个wifi,否则无法打开IP地址;将开发板连接到电脑,点击点击工具→端口,然后选择自己实际接的COM口,不清楚COM口的可以打开电脑设备管理器查看一下,插拔设备看看哪个COM口会刷新就是哪个COM口;安装好esp32库之后,点击工具→开发板→esp32→AI Thinker ESP32-CAM,型号要仔细找找,不要选错了;

qq_34426854的博客 2万+

用VASPKIT+Quantum Espresso高效绘制能带图:从K点路径生成到可视化全流程

本文详细介绍了如何整合VASPKIT与Quantum Espresso(QE)软件,构建一套高效的能带计算与可视化工作流。通过VASPKIT自动化生成高对称K点路径,结合QE完成自洽与非自洽计算,并利用gnuplot绘制发表级能带图。该流程极大提升了材料电子结构研究的效率与可重复性,是进行DFT能带计算的实用指南。

weixin_29294975的博客 163

【jzoj3117】【WinterCamp 2013】【模积和】【分块】【扩展欧几里得】

题目大意求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j。答案mod 19940417。解题思路观察可知ans=∑∑((n mod i)(m mod j))1<=i<=n,1<=j<=m,i≠j。=>ans=∑(n mod i)∑(m mod j)-∑((n mod i)(m mod i))f(n)=∑(n mod i)g(n,m)=∑(n mod i)(m

inklutcuah’s blog 571

eNSP-抓包解析TCP三次握手和四次挥手的过程

一、环境搭建 1.设备连接 2.服务器配置 3.客服端配置 二、抓包测试 1.打开抓包软件 2.客户端获取数据 三、抓包结果

小橙子的博客 3353

#广搜,分块#jzoj 3974 CH #46A 磁力块

题目 主人公一开始在一个位置用磁铁吸引其它磁铁,当磁铁的质量≤≤\leq磁力就会吸到主人公手里,不在主人公手里的磁铁不会互相吸引,主人公可以更换磁铁,但是只能原地不动,问主人公最多能吸到多少块磁铁 分析 这道题可以用广搜做,必然的暴力,但是问题是直接暴力会超时,怎么办?分块优化,用分块得到一个个区间,当然区间之间的排序用距离排序,区间内的排序用重量排序,然后,就没有然后了 ...

lemondinosaur的博客 292

⚡【C++要笑着学】(13) STL介绍:什么是STL标准模板库 | STL的版本 | 浅谈STL的缺陷

再讲解函数模板之前先对STL做一个小铺垫,本篇将对STL做一个简单的介绍。

有道无术, 术尚可求。有术无道, 止于术。 3036

改进的U-Net在视网膜血管分割上的应用

为了提高算法在血管边界的分割能力,在编码部分采用全局卷积网络(GCN)和边界细化(BR)替换传统的卷积层;在跳跃连接部分引入改进的位置注意模块(PA)和通道注意模块(CA),目的是增加血管与背景之间的对比度,使网络更好地将血管与背景分割开;此外,为了提高网络的性能,在编码部分的最后一层使用密集卷积网络解决网络过拟合问题,同时为了在一定程度上解决梯度爆炸、梯度消失的问题,在解码部分的每一层使用卷积长短记忆网络提升网络获取特征信息的能力。替换传统的卷积操作来解决血管边界非血管像素误分为血管的问题。

weixin_70923796的博客 783

[JZOJ4438] K小数查询(经典分块)

Description给你NN个数组成的序列,需要支持两种操作 11 LL RR xx 将LL到RR加上xx 22 LL RR kk 求LL到RR第kk小的数 Solution分块大法好!我们将序列分成N−−√\sqrt {N}块,每块中维护原来的顺序的值,以及将该块所有值排序后的值,并且每个值还带有一个指针指向对应的那个值修改整块的就直接打标记,两边的暴力重构该块关键在查询!我们可以二分一

Never give in. 1万+

电磁场仿真:电磁场基础理论_(13).微波技术基础

微波是指频率在300 MHz到300 GHz之间的电磁波。这一频率范围对应的波长为1米到1毫米。

2401_87715305的博客 1318

2019.1.20【NOIP提高组】模拟B组 总结

纪中Day 3,Rank 16,同届Rank 4,+NOIP Rank2

Ajwallet 446

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【JZOJ4231】寻找神格

description 淬炼完神体,王仙女被传送到了遥远处一座没有神雷的浮岛上,发现浮岛上除了一扇门以外什么都没有。他来到门前,发现上面写着这样一段话: 一个神出了拥有强大的神体外,还需要一枚神格。然而,想要获得神格没那么简单,除了有实力外还需要有运气。曾经有一个人叫金(jin)字(zi)塔(da),他的神体很强,很壮,可是他根本没有运气,所以最后神格拒绝了他。打开这扇门,你将会进入一个神格创造的...

路人黑的纸巾 306

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

AI Agent 引发事故率上升?研发团队如何用权限与审批设计守住稳定性

AI Agent 正加速渗透研发链路,但 Meta 一年实验数据显示,大规模引入后系统事故率上升约四成,工程师救火工时增加七成。这并非否定 Agent 价值,而是揭示大模型在生成代码、执行变更时缺少业务语义判断,高自主权操作叠加“惯性信任”容易把小问题放大成大事故。技术团队需要理解 Agent 的能力边界,并从权限管控、审批流程、审计日志、灰度发布等工程实践入手,将“自动化工具”约束在安全范围内。本文结合事故率拆解、权限策略示例和数据分析思路,为 AI Agent 的落地提供可参考的稳定性设计框架,帮助研发

weixin_34380948的博客 305

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JZOJ 4231. 寻找神格

题目 Description  淬炼完神体,王仙女被传送到了遥远处一座没有神雷的浮岛上,发现浮岛上除了一扇门以外什么都没有。他来到门前,发现上面写着这样一段话:一个神出了拥有强大的神体外,还需要一枚神格。然而,想要获得神格没那么简单,除了有实力外还需要有运气。曾经有一个人叫金(jin)字(zi)塔(da),他的神体很强,很壮,可是他根本没有运气,所以最后神格拒绝了他。打开这扇门...

weixin_30379973的博客 99

【线段树 数学】JZOJ_4231 寻找神格

题意 给出一个数列,我们对它进行操作。 输入操作符ttt 1、当t=0t=0t=0时,这一行还有两个数aaa,bbb,表示编号为aaa的部落增加了bbb个人(如果b&amp;amp;lt;0b&amp;amp;lt;0b&amp;lt;0则表示减少了∣b∣|b|∣b∣个人)。 2、当t=1t=1t=1时,这一行还有三个数a,b,ca,b,ca,b,c,表示编号为a∼ba\sim ba∼b的部落增加了ccc个人(如果c&amp;a...

GOODPLACE 293

[jzoj 4231] 寻找神格{线段树+分解因式}

题目 Description  淬炼完神体,王仙女被传送到了遥远处一座没有神雷的浮岛上,发现浮岛上除了一扇门以外什么都没有。他来到门前,发现上面写着这样一段话: 一个神出了拥有强大的神体外,还需要一枚神格。然而,想要获得神格没那么简单,除了有实力外还需要有运气。曾经有一个人叫金(jin)字(zi)塔(da),他的神体很强,很壮,可是他根本没有运气,所以最后神格拒绝了他。打开这扇门,你将会进入一个神...

Nowed 674

[线段树] Jzoj P4231 寻找神格

Description  淬炼完神体,王仙女被传送到了遥远处一座没有神雷的浮岛上,发现浮岛上除了一扇门以外什么都没有。他来到门前,发现上面写着这样一段话:一个神出了拥有强大的神体外,还需要一枚神格。然而,想要获得神格没那么简单,除了有实力外还需要有运气。曾经有一个人叫金(jin)字(zi)塔(da),他的神体很强,很壮,可是他根本没有运气,所以最后神格拒绝了他。打开这扇门,你将会进入一个神格...

weixin_30911809的博客 167

jzoj4231-寻找神格【线段树,数学】

正题 题目大意 4个操作 单点修改,区间修改,区间求和,区间求方差 方差为:∑(xi−ave)2n\frac{\sum(x_i-ave)^2}{n}n∑(xi​−ave)2​ aveaveave为平均值 解题思路 我们将方差的式子分解一下 ∑(xi−ave)2n\frac{\sum(x_i-ave)^2}{n}n∑(xi​−ave)2​ ∑(xi2−2∗x∗ave+ave2)n\frac{\s...

QuantAsk 434

JZOJ 4231. 【五校联考4day1】寻找神格

...题目:分析:代码: 题目: 传送门 分析: 普通线段树,只是要维护多一个平方和 代码: #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cmath&gt; #include&lt;cstring&gt; #include&lt;cstdlib&gt; #include&lt;algorithm&gt; #inclu...

qq_35786326的博客 201

2019.1.20【NOIP提高组】模拟B组 JZOJ 4231 寻找神格

分块神仙题

Ajwallet 449

JZOJ 2019.1.20 题目合集

...4229. 【五校联考4day1】学习神技4230. 【五校联考4day1】淬炼神体4231. 【五校联考4day1】寻找神格![在这里插入图片描述](https://img-blog.csdnimg.cn/20190120184544517.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_a...

qq_35786326的博客 495

2019.01.20【NOIP提高组】模拟 B 组 总结

题目 [jzoj 4229] 学习神技 {费马小定理+逆元} [jzoj 4230] 淬炼神体{ 0/1分数规划+二分答案} 今天状态较好,但是血亏了150分。第一道题没有注意到细节问题,然后第三题忘记了要分解因式。 总之送给自己几句话,既然你旁边有这么多人在努力,你又有什么理由不努力呢? 如何做更好的自己,不是嘴上说说就可以,需要行动! 你连死亡都不怕,你还怕什么? 努力了总会有回报的。 ...

Nowed 467

欢乐纪中某B组赛【2019.1.20】

前言 有回来做BBB组了,话说第3道题就是AAA组第一道。 成绩 RankRankRank是有算别人的 今天XJQXJQXJQ不在 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC 111 2017wyc2017wyc2017wyc 270270270 100100100 100100100 707070 ...

QuantAsk 582
上一篇: 【JZOJ4230】淬炼神体【数论,数学】【二分】
下一篇: 【JZOJ4208】线段树什么的最讨厌了【搜索】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值