BZOJ3745 / LOJ2809 Norma题解(分治)

别再手动算临界转速了!用ANSYS Workbench 2023 R2快速搞定转子坎贝尔图(附完整APDL命令流) 本文详细介绍了如何利用ANSYS Workbench 2023 R2快速生成转子坎贝尔图,实现全自动临界转速分析。通过对比传统手动计算与Workbench自动化流程的效率差异,展示了其在旋转机械设计中的革命性优势,包括大幅缩短分析周期、提升精度至98.7%。文章还提供了完整的APDL命令流和实战案例,帮助工程师快速掌握这一高效工具。 阅读详情

题目:BZOJ3745/LOJ2809.
题目大意:给定一个长度为 n n n的序列 a i a_i ai​,求:
∑ l = 1 n ∑ r = l n ( r − l + 1 ) max ⁡ i = l r { a i } min ⁡ i = l r { a i }    ( m o d    1 0 9 ) \sum_{l=1}^{n}\sum_{r=l}^{n}(r-l+1)\max_{i=l}^{r}\{a_i\}\min_{i=l}^{r}\{a_i\}\,\,(mod\,\,10^9) l=1∑n​r=l∑n​(r−l+1)i=lmaxr​{ai​}i=lminr​{ai​}(mod109)

1 ≤ n ≤ 5 ∗ 1 0 5 , 1 ≤ a i ≤ 1 0 8 1\leq n\leq 5*10^5,1\leq a_i\leq 10^8 1≤n≤5∗105,1≤ai​≤108,答案对 1 0 9 10^9 109取模.

线段树+单调栈做法.

首先,看到这种球所有子区间的 m i n min min和 m a x max max运算一下的套路题,马上就能知道它是分治 / / /线段树+单调栈.

考虑分治的做法,每次分治区间 [ l , r ] [l,r] [l,r]的时候求跨过中点 m i d mid mid的区间贡献和.

考虑枚举左端点 i = m i d → l i=mid\rightarrow l i=mid→l,并同时求出此时 [ i , m i d ] [i,mid] [i,mid]中的最大值 m x mx mx和最小值 m n mn mn,同时求出在对应在 [ m i d + 1 , r ] [mid+1,r] [mid+1,r]中第一个大于 m x mx mx的位置 p m x pmx pmx和第一个小于 m n mn mn的位置 p m n pmn pmn,先假设 p m x &lt; p m n pmx&lt;pmn pmx<pmn,此时右端点在 [ m i d + 1 , r ] [mid+1,r] [mid+1,r]中的位置情况分为三个不同的区间 [ m i d + 1 , p m x ) , [ p m x , p m n ) , [ p m n , r ] [mid+1,pmx),[pmx,pmn),[pmn,r] [mid+1,pmx),[pmx,pmn),[pmn,r].

考虑第一个区间中的右端点 r j r_j rj​,它的贡献必然是 m x ∗ m n ∗ ( r j − i + 1 ) mx*mn*(r_j-i+1) mx∗mn∗(rj​−i+1),把 r j − i + 1 r_j-i+1 rj​−i+1拆分成 ( r j − m i d ) + ( m i d − i + 1 ) (r_j-mid)+(mid-i+1) (rj​−mid)+(mid−i+1)两部分计算即可.

第二个区间中的右端点 r j r_j rj​,它的贡献是 max ⁡ k = m i d + 1 r j { a k } ∗ m n ∗ ( r j − i + 1 ) \max_{k=mid+1}^{r_j}\{a_k\}*mn*(r_j-i+1) maxk=mid+1rj​​{ak​}∗mn∗(rj​−i+1),同理把区间长度拆成两部分计算,并用前缀和预处理一些信息即可.

第三个区间中的右端点 r j r_j rj​也差不多,贡献为 max ⁡ k = m i d + 1 r j { a k } ∗ min ⁡ k = m i d + 1 r j { a k } ∗ ( r j − i + 1 ) \max_{k=mid+1}^{r_j}\{a_k\}*\min_{k=mid+1}^{r_j}\{a_k\}*(r_j-i+1) maxk=mid+1rj​​{ak​}∗mink=mid+1rj​​{ak​}∗(rj​−i+1),类似处理即可.

时间复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn).

代码如下:

#include<bits/stdc++.h>
using namespace std;

#define Abigail inline void
typedef long long LL;

const int N=500000,mod=1000000000;

int add(int a,int b){return a+b>=mod?a+b-mod:a+b;}
int sub(int a,int b){return a-b<0?a-b+mod:a-b;}
int mul(int a,int b){return (LL)a*b%mod;}
void sadd(int &a,int b){a=add(a,b);}
void ssub(int &a,int b){a=sub(a,b);}
void smul(int &a,int b){a=mul(a,b);}

int n,a[N+9];
int sp[N+9],smx[N+9],smn[N+9],spmx[N+9],spmn[N+9],smxn[N+9],spmxn[N+9];
int ans;

void Divide(int L,int R){
  if (L==R) {sadd(ans,mul(a[L],a[L]));return;}
  int mid=L+R>>1;
  Divide(L,mid);
  Divide(mid+1,R);
  sp[mid]=smx[mid]=smn[mid]=spmx[mid]=spmn[mid]=smxn[mid]=spmxn[mid]=0;
  int mx=a[mid+1],mn=a[mid+1];
  for (int i=mid+1;i<=R;++i){
  	mx=max(mx,a[i]);mn=min(mn,a[i]);
  	sp[i]=add(sp[i-1],i-mid);
  	smx[i]=add(smx[i-1],mx);smn[i]=add(smn[i-1],mn);
  	spmx[i]=add(spmx[i-1],mul(mx,i-mid));
  	spmn[i]=add(spmn[i-1],mul(mn,i-mid));
  	smxn[i]=add(smxn[i-1],mul(mx,mn));
  	spmxn[i]=add(spmxn[i-1],mul(mul(mx,mn),i-mid));
  }
  mx=a[mid];mn=a[mid];
  int pmx=mid+1,pmn=mid+1;
  for (int i=mid;i>=L;--i){
    mx=max(mx,a[i]);mn=min(mn,a[i]);
    for (;pmx<=R&&a[pmx]<=mx;++pmx);
    for (;pmn<=R&&a[pmn]>=mn;++pmn);
    sadd(ans,mul(add(mul(min(pmx,pmn)-mid-1,mid-i+1),sp[min(pmx,pmn)-1]),mul(mx,mn)));
    if (pmx<pmn) sadd(ans,mul(mn,add(sub(spmx[pmn-1],spmx[pmx-1]),
	             mul(sub(smx[pmn-1],smx[pmx-1]),mid-i+1))));
    else sadd(ans,mul(mx,add(sub(spmn[pmx-1],spmn[pmn-1]),mul(sub(smn[pmx-1],smn[pmn-1]),mid-i+1))));
    sadd(ans,add(sub(spmxn[R],spmxn[max(pmx,pmn)-1]),mul(sub(smxn[R],smxn[max(pmx,pmn)-1]),mid-i+1)));
  }
}

Abigail into(){
  scanf("%d",&n);
  for (int i=1;i<=n;++i)
    scanf("%d",&a[i]);
}

Abigail work(){
  Divide(1,n);
}

Abigail outo(){
  printf("%d\n",ans);
}

int main(){
  into();
  work();
  outo();
  return 0;
}
如何缩减layout电路面积?减少晶体管的数量——以全加器为例【VLSI】 How to reduce the number of transistors to reduce circuit area? -- Take the Binary Full Adder as an example 优化面积的方法 1. 减少晶体管的数量 2. 改变gate matrix的布局 阅读详情

相关推荐

Ollama最新快速上手指南:从安装到精通本地AI模型部署

想让Ollama跑你的"私房模型"?三种主流格式全支持,总有一款适合你!GGUF格式(推荐新手首选)创建Modelfile文件:执行创建命令:运行你的专属模型:PyTorch/Safetensors格式(适合进阶玩家)先用库测试模型能否正常加载确保模型结构完整后再导入Ollama官方文档有详细转换指南专业小贴士GGUF格式最轻量,PyTorch最灵活,Safetensors最安全遇到问题?试试用llama.cpp进行格式转换7B参数模型推荐使用q4_0量化级别想让AI用马里奥。

全世界的博客 2309

BZOJ3745 / LOJ2809 Norma题解(线段树+单调栈)

题目:BZOJ3745/LOJ2809. 题目大意:给定一个长度为nnn的序列aia_iai​,求: ∑l=1n∑r=ln(r−l+1)max⁡i=lr{ai}min⁡i=lr{ai}&ThinSpace;&ThinSpace;(mod&ThinSpace;&ThinSpace;109) \sum_{l=1}^{n}\sum_{r=l}^{n}(r-l+1)\max...

hzk_cpp的博客 383

自适应粒子群优化(Adaptive Particle Swarm Optimization,APSO

下面是一个关于自适应粒子群优化(Adaptive Particle Swarm Optimization,APSO)的博客,希望可以帮助您。提示:以下是本篇文章正文内容,下面案例可供参考在上面的代码中,表示粒子的数量,表示解空间的维度,表示迭代次数,表示优化的目标函数。在__init__方法中,我们初始化了粒子群的位置和速度,并将每个粒子的位置作为其最优解,将其适应度值初始化为正无穷。我们还初始化了学习因子和惯性权重的参数。在run方法中,我们迭代了次,计算每个粒子的适应度值和最优解。

weixin_52026057的博客 9916

LOJ6031 「雅礼集训 2017 Day1」字符串 SAM、根号分治

传送门 注意到\(qk \leq 10^5\),我们很不自然地考虑根号分治: 当\(k > \sqrt{10^5}\),此时\(q\)比较小,与\(qm\)相关的算法比较适合。对串\(s\)建SAM,考虑每组询问,将其所有的\((a,b)\)按照\(b\)从小到大排序,然后把\(w\)在\(s\)的SAM上匹配,每当右端点变为\(b\)的时候倍增跳到串\(s[a:b]\)的位置查...

weixin_30657541的博客 288

Linux-ftrace-双nop机制的实现

linux-ftrace内核追踪-双nop机制的实现原理

qq_43707773的博客 1072

详细介绍:国产操作系统银行麒麟V10的下载和安装

银河麒麟是由。银河麒麟已经发展为银河麒麟服务器操作系统、桌面操作系统、嵌入式操作系统、麒麟云、操作系统增值产品为代表的产品线。为攻克中国软件核心技术“卡脖子”的短板,银河麒麟建设自主的开源供应链,发起中国首个开源桌面操作系统根社区openKylin,银河麒麟操作系统以openKylin等自主根社区为依托,发布最新版本。

lz17267861157的博客 1万+

LOJ#6289. 花朵 树链剖分+分治NTT

本来以为这道题会非常难调,但是没想到调了不到 5 分钟就 A 了. 由于基于多项式的运算都可以方便地进行封装,所以细节就不是很多(或者说几乎没有细节) 题意:给定一棵树,每个点有点权,求对于所有大小为 $m$ 的独立集的点权之积的和. 数据范围:$n,m \leqslant 8 \times 10^4$. 先考虑一个十分显然的 $O(n^2)$ 暴力: 令 $f[...

EM LGH 567

深入瑞芯微ISP生态:手把手配置RK3588上的RKAIQ Server并与Windows端RKISP Tuner联调

本文详细介绍了如何在RK3588平台上配置RKAIQ Server并与Windows端的RKISP Tuner进行联调,以实现高效的ISP调优。从环境准备、服务部署到实战调试,涵盖了IMX415相机适配等关键步骤,帮助开发者快速掌握瑞芯微ISP生态的核心技术。

weixin_32447969的博客 670

『分治』BZOJ3745 : norma

题目描述 题解 对于区间最大值最小值问题,考虑分治。 求解区间[l,r]的答案,考虑跨越mid的贡献和是多少。 如下图: 我们考虑枚举这样的区间左端点i,假设: max⁡{ai,ai+1,...,amid}=max⁡\max\{a_i,a_{i+1},...,a_{mid}\}=\maxmax{ai​,ai+1​,...,amid​}=max min⁡{ai,ai+1,...,amid}=mi...

Ronaldo7_ZYB的博客 300

SPAD IMX479规格_分辨率

当然IMX479具备IMX459几乎全部的数字架构,但也有一个缺点就是贵,这个让头部的主机厂有些犹豫,毕竟大家都在集中火力想把车载LiDAR玩进千元机。如果用一片IMX479是不太可能实现千元内部的,当然国产也在奋起直追,特别在前面的几家SPAD厂商都具备开发IMX479的实力,但相对来说落地可能更是当下所考虑的,IMX479的迭代是基于IMX459,小编已经注意到国内有一两家已经在挑战479的规格了,如果国产SPAD没有大规模量产就直接流片IMX479的规格,可能就有点忽略市场的反馈闭环。

致力于lidar应用开发 2418

AUTOSAR进阶图解==>AUTOSAR_SWS_CANNetworkManagement

本文介绍了AUTOSAR架构中的CAN网络管理(CanNm)模块,主要内容包括: 模块概述:CanNm是协调CAN网络节点状态转换的基础组件,采用去中心化设计,通过周期性发送网络管理PDU保持网络活跃状态,支持网络唤醒、睡眠和部分网络功能。 架构设计:CanNm位于AUTOSAR中间层,连接上层通信管理器(ComM)和底层CAN接口(CanIf),包含状态管理、PDU处理和定时器管理等子组件。 状态机设计:定义了三种主要模式(总线睡眠、准备睡眠和网络模式)及其转换逻辑,网络模式又包含重复消息、正常操作和准备

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 2041

[bzoj3745][分治]Norma

Description Input 第1行,一个整数N; 第2~n+1行,每行一个整数表示序列a。 Output 输出答案对10^9取模后的结果。 Sample Input 4 2 4 1 4 Sample Output 109 HINT 【数据范围】 N &lt;= 50000...

Rose_max的博客 415

Python 爬虫实战:爬取 BOSS 直聘职位,实现岗位要求关键词提取

摘要:本文基于BOSS直聘数据分析师岗位信息,采用Python爬虫技术获取职位数据,通过文本分析和可视化方法研究岗位技能需求特征。研究首先设计爬虫程序获取职位基本信息和岗位要求文本,经数据清洗后运用jieba分词和词频统计提取关键词。结果显示SQL、Python为最核心技能,不同级别岗位需求差异明显:初级重基础数据处理,高级需建模和管理能力;行业间亦存在差异,互联网关注用户增长,金融侧重风控。研究为求职者技能提升提供了数据支持,同时展示了从非结构化文本中挖掘有价值信息的完整流程。

2503_91057718的博客 1766

【bzoj】3745: [Coci2015]Norma

题意: n &lt;= 5e5 题解: ** 首先,想到确定最大值,最小值的区间一起统计。因为是统计所有区间,第一想法是枚举右端点,维护所有左端点的答案 用单调栈分别维护最小值,最大值,把贡献拆开讨论一下,需要用线段树维护mx(i) * mn(i), mx(i) * mn(i) * i,mx(i) * i,mn(i) * i,mx(i),mn(i) 6个和。因为更新的时候要么更新最大值,要么更新...

执子之手,与子偕老 318

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

温度PID控制PLC程序

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

【原创】BZOJ3745 Norma

CDQ分治 说在前面 ORZ 这个我就是逊啦! BZOJ3745 题目描述 输入格式 第1行,一个整数N; 第2~n+1行,每行一个整数表示序列a。 输出格式 输出答案对10^9取模后的结果。 输入样例 4 2 4 1 4 输出样例 109 提示 【数据范围】 N <= 500000 1 <= aia_iai​ <= 10810^8108 分析 这题目是什么意思呢…… 枚举每个...

致上 268

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

bzoj3745: [Coci2015]Norma

这道题维护了一大堆前缀和,真是。。。。因为MOD又调了好久。。。。。 考虑分治思想,对于l,r,mid可以枚举左端点,右端点在mid右侧的情况,利用单调性和前缀和达到O(nlogn)。 细节看代码:(Pr开头的都是前缀和) #include #include #define N 500005 #define ll long long #define MOD 1000000000 using

miaom的博客 1625

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【分治计数】BZOJ3745 [Coci2015]Norma

题面在这里分治计数的经典题目……对midmid右边的每个位置维护以下量:i−midi-mid的前缀和前缀maxmax和minmin前缀maxmax和minmin的前缀和mxmx和mnmnmx⋅mnmx\cdot mn的前缀和mx⋅mn(i−mid)mx\cdot mn (i-mid)的前缀和mx(i−mid)mx(i-mid)和mn(i−mid)mn(i-mid)的前缀和然后JXB讨论一下就好了示

linkfqy 833

bzoj 3745: [Coci2015]Norma 分治&数学

首先分治,然后答案转变为求区间[l,r]中,经过终点mid=(l+r)>>1的子串[x,y]的答案之和。        那么不妨枚举左端点为x,那么显然可以得到区间[x,mid]的最小值u和最大值v。同时维护两个指针j,k,表示最远的j使得[mid+1,j]的最小值没有u小,k维护最大值。那么:        1.对于所有y∈[mid+1,min(j,k)],最小值为u,最大值为v,直接利用高

lych的博客 2280

[分治] BZOJ 3745 [Coci2015]Norma

考虑分治  左端点在左边 右端点在右边 枚举左端点 分情况讨论最大最小分别在哪边 然后前缀和处理 #include #include #include using namespace std; typedef long long ll; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1

雯舞 761

[ 分治 ] [ COCI2015 ] BZOJ3745

分治到一个区间时枚举左端点,然后分类讨论一下就好了。#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2

gjghfd 341

bzoj3216: 话旧2

大家好,我是SB 这道题是在看3215时找不到题面点进来的(然而并没有一眼看出这两题的差别)。 一开始想了一会,感觉就是一个组合数,然后最小值==0就有点像Catalan数,于是打开geogebra画图,得到了一个:Ans=Get(Y-X,Z)-Get(Y+X+1,Z-1),反正证(gan)出(jue)他是对的,就狂WA。。。后来找的了→ ,发现自己傻了。。 然后用lucas定理

miaom的博客 1069

BZOJ3745: [Coci2015]Norma【分治】

题目描述: Mod 109 题目分析: 分治真是强大。。 计算[l,r][l,r][l,r]的答案,只需要考虑怎么算跨过midmidmid的答案,其余的分治即可。枚举左端点i:mid→li:mid\rarr li:mid→l,记[i,mid][i,mid][i,mid]的最小值为mnmnmn,最大值为mxmxmx,找到右边最后一个≥mn\ge mn≥mn的位置jjj,以及最后一个≤mx\le m...

Master.Yi的博客 274

【BZOJ3745】Norma(CDQ分治)

【BZOJ3745】Norma(CDQ分治) 题面 BZOJ 洛谷 题解 这种问题直接做不好做,显然需要一定的优化。考虑\(CDQ\)分治。 现在唯一需要考虑的就是跨越当前中间节点的所有区间如何计算答案了。 从\(mid\)开始向左枚举左端点,考虑右端点的贡献。那么我们在右侧记录两个指针\(p,q\),分别表示左侧的最大值和最小值第一次改变的位置。这两个指针会把整个序列分成三段。 第一段最大值和最...

weixin_30236595的博客 190

【bzoj3745】[Coci2015]Norma

Description Input第1行,一个整数N; 第2~n+1行,每行一个整数表示序列a。 Output输出答案对10^9取模后的结果。 Sample Input42414 Sample Output109【数据范围】N <= 5000001 <= a_i <= 10^8题解 分治。 去中间数,把区间分为两段,利用前缀和单调性等优化至nlogn代码#include<bits/st

wang_sj的博客 523

bzoj 3745: [Coci2015]Norma

考虑分治,对于区间[l,r],计算左端点在[l,mid],右端点在[mid,r]的区间对答案的影响 然后自己推公式。 #include #include #include #include #define rep(j,k,l) for (LL j=k;j<=l;++j) #define red(j,k,l) for (LL j=k;j>=l;--j) #define max(a,b)

YYMHL 377

【JOISC 2020】【LOJ3273】【UOJ503】扫除(分治)(启发式合并)

题解: 比较显然的分治,不过写起来细节有点多。 而且第一次听说JOI居然还有卡常的情况,1e6跑两个log。 考虑我们当前处理的所有点都满足 x≥sx,y≥syx\geq sx,y\geq syx≥sx,y≥sy,这样每次过 (sx,sy)(sx,sy)(sx,sy) 作斜率为 111 的直线,交三角形斜边的点作为分治点,接下来处理 (sx,py+1)(sx,py+1)(sx,py+1) 和 (p...

zxyoi_dreamer的博客(不定期诈尸) 398
上一篇: BZOJ3745 / LOJ2809 Norma题解(线段树+单调栈)
下一篇: Fibonacci数相关
hezlik
博客等级 码龄9年 111粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值