[bzoj3745][分治]Norma

别再浪费主板上的PCIE插槽了!手把手教你用VL805芯片打造高速USB3.0扩展坞 本文详细介绍了如何利用VL805芯片将主板闲置的PCIE插槽改造为高性能USB3.0扩展坞。从芯片选型、电路设计到焊接工艺和系统调试,提供了一套完整的实战指南,帮助用户充分释放硬件潜能,实现高达5Gbps的传输速度。 阅读详情

Description

这里写图片描述

Input

第1行,一个整数N; 第2~n+1行,每行一个整数表示序列a。

Output

输出答案对10^9取模后的结果。

Sample Input

4

2

4

1

4

Sample Output

109

HINT

【数据范围】

N <= 500000

1 <= a_i <= 10^8

题解

还是分治
自己yy的东西t的一逼啊233333
对于一段区间l,rl,r,找到他的中间点midmid
枚举l midl mid,我们的目标是对于所有[l,mid][l,mid]找出他在所有[mid+1,r][mid+1,r]区间内的答案
对于每个ii,维护两个指针u,v(u,v<=r)
满足[mid+1,u][mid+1,u]中的数全部大于[i,mid][i,mid]的最小值且u最大
满足[mid+1,v][mid+1,v]中的数全部小于[i,mid][i,mid]的最大值且v最大
于是我们有三种讨论,不妨假设u < v,设mnmn表示[i,mid][i,mid]中的最小值,mxmx表示[i,mid][i,mid]中的最大值
对于[mid+1,u][mid+1,u],他的贡献为

∑j=mid+1umx∗mn+(j−i+1)∑j=mid+1umx∗mn+(j−i+1)

显然可以直接O(1)O(1)
对于[u+1,v][u+1,v],他的贡献为
∑j=u+1vmx∗min[mid+1,j]∗(j−i+1)∑j=u+1vmx∗min[mid+1,j]∗(j−i+1)

拆一下就变成了这样
mx∗∑j=u+1vmin[mid+1,j]∗j−min(mid+1,j)∗(i−1)mx∗∑j=u+1vmin[mid+1,j]∗j−min(mid+1,j)∗(i−1)

预处理前缀和即O(1)O(1)
对于[v+1,r][v+1,r],他的贡献为
∑j=v+1rmax[mid+1,j]∗min(mid+1,j)∗j−max(mid+1,j)∗min(mid+1,j)∗(i−1)∑j=v+1rmax[mid+1,j]∗min(mid+1,j)∗j−max(mid+1,j)∗min(mid+1,j)∗(i−1)

预处理前缀和仍然可以O(1)O(1)
然后又是愉快的nlognnlogn了
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#define LL long long
#define lc now<<1
#define rc now<<1|1
using namespace std;
const LL mod=1e9;
inline int read()
{
    int f=1,x=0;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int n;
LL a[510000];
LL s1[510000],s2[510000],s3[510000],s4[510000],s5[510000],s6[510000],ans;
/*
mn[mid+1,j]*j
mn[mid+1,j]
mx[mid+1,j]*j
mn[mid+1,j]
mx[mid+1,j]*mn[mid+1,j]*j
mx[mid+1,j]*mn[mid+1,j]
*/
LL C(int s,int t){return ((LL)s+t)*((LL)t-s+1)/2%mod;}
void sol(int l,int r)
{
    if(l==r){ans=(ans+a[l]*a[l])%mod;return ;}
    int mid=(l+r)>>1;
    s1[mid]=s2[mid]=s3[mid]=s4[mid]=s5[mid]=s6[mid]=0;
    LL u1=a[mid+1],u2=a[mid+1];
    sol(l,mid);
    sol(mid+1,r);
    for(LL j=mid+1;j<=r;j++)
    {
        u1=min(u1,a[j]);u2=max(u2,a[j]);
        //int u1=findhh(1,1,n,mid+1,j,0),u2=findhh(1,1,n,mid+1,j,1);
        s1[j]=(s1[j-1]+(u1*j%mod))%mod;
        s2[j]=(s2[j-1]+u1)%mod;
        s3[j]=(s3[j-1]+(u2*j%mod))%mod;
        s4[j]=(s4[j-1]+u2)%mod;
        s5[j]=(s5[j-1]+u1*u2%mod*j%mod)%mod;
        s6[j]=(s6[j-1]+u1*u2%mod)%mod;
    }
//  for(int j=mid+1;j<=r;j++)printf("%lld %lld\n",s1[j],s2[j]);
    int u=mid,v=mid;
    LL mn=a[mid],mx=a[mid];
    for(LL i=mid;i>=l;i--)
    {
        mn=min(mn,a[i]);mx=max(mx,a[i]);
        //int mn=findhh(1,1,n,i,mid,0),mx=findhh(1,1,n,i,mid,1);
        while(u<r&&mn<a[u+1])u++;
        while(v<r&&mx>a[v+1])v++;
        ans=(ans+mx*mn%mod*C(mid-i+2,min(u-i+1,v-i+1))%mod)%mod;
        if(u<=v)
        {
            ans=(ans+mx*((s1[v]-s1[u]+mod)%mod-((i-1)*(s2[v]-s2[u]+mod)%mod)%mod)%mod+mod)%mod;
            ans=(ans+((s5[r]-s5[v]+mod)%mod)-((i-1)*(s6[r]-s6[v]+mod)%mod)+mod)%mod;
        }
        else
        {
            ans=(ans+mn*((s3[u]-s3[v]+mod)%mod-((i-1)*(s4[u]-s4[v]+mod)%mod)%mod)%mod+mod)%mod;
            ans=(ans+((s5[r]-s5[u]+mod)%mod)-((i-1)*(s6[r]-s6[u]+mod)%mod)+mod)%mod;
        }
    }
}
int main()
{
//  freopen("a.in","r",stdin);
//  freopen("a.out","w",stdout);
    n=read();
    for(int i=1;i<=n;i++)a[i]=read();
    sol(1,n);
    printf("%lld\n",ans);
    return 0;
}
SAP Gateway Foundation OData V4 服务管理深度解析,从 Service Repository 到 Service Group 的完整运行逻辑 本文解析了SAP S/4HANA中OData V4 API的技术架构,重点阐述Service Repository、Service与Service Group的三层管理体系。以SalesOrder和PurchaseOrder API为例,说明不同服务可能属于特定repository(如srvd_a2x)而非默认DEFAULT库。Service Group作为业务模型组合单元,支持跨服务引用和统一配置,其发布状态直接影响服务可用性。文中对比了后台管理事务/IWBEP/V4_ADMIN与网关端/IWFND/V4 阅读详情

相关推荐

Mediapipe手势识别实战——基于关节角度计算实现动态手势分类

本文详细介绍了如何利用Mediapipe进行手势识别,通过计算手指关节弯曲角度实现动态手势分类。文章从基础原理出发,讲解了关节角度计算的数学方法,并提供了Python实现代码。同时,还分享了数字手势和OK手势的识别实战经验,以及性能优化和工程实践中的关键技巧,帮助开发者快速掌握实时手势识别技术。

weixin_26891599的博客 403

BZOJ 4237稻草人【分治】

DescriptionJOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典。有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地。和启示中的一样,田地需要满足以下条件:田地的形状是边平行于坐标轴的长方形;左下角和右上角各有一个稻草人;田地的内部(不包括边界)没有稻草人。给出每个稻草人的坐标,请你求出有多少遵从启示的田地的个数题解分治。由于是两维的,可以使其中

Sdywolf的博客 576

LabVIEW内存优化实战:用DVR和队列高效处理大型数组,告别数据副本

本文深入探讨LabVIEW内存优化技术,重点介绍数据值引用(DVR)和单元素队列(SEQs)在高效处理大型数组中的应用。通过对比传统方法与现代引用技术的性能差异,提供减少内存副本、提升程序效率的实战方案,帮助开发者在测试测量、图像处理等数据密集型场景中实现显著性能提升。

weixin_30835649的博客 1062

【算法】分治法详解和汇总

分治法的基本思想是将一个难以直接解决的大问题划分为一些规模较小的子问题,分别求各个子问题,然后将各个子问题的答案合并成为规模较大的原问题的解。在用分治法设计算法的时候,最好使得子问题的规模大致相同。也就是将一个问题的划分称为规模相等的k个子问题,这种使得子问题规模大致相等的做法是出自一种的启发性问题。另外,在使用分治法设计算法的时候,最好使得各个子问题之间相互独立,如果各个子问题不是独立的,那么分治法会求一些重复求解的重叠子问题,这会导致做很多重复工作,使得算法的效率下降,此时使用动态规划算法更好。

weixin_45434953的博客 7279

Vue - 解决报错 Error: Cannot find module ‘XXX\@vue\cli-service\bin\vue-cli-service.js‘(vue项目编译运行出错,启动失败)

vue报错,Error: Cannot find module ‘@vue\cli-service\bin\vue-cli-service.js‘,vue2项目启动报错,vue3项目运行出错,vue执行npm run serve报错,找不到@vue/cli-service模块,vue项目关于:Error: Cannot find module ‘D:\@vue\cli-service\bin\vue-cli-service.js‘的解决方案,vue项目跑不起来了,Vue项目报错,跑项目报错Cannot fi

🏆 前端领域优质创作者 3115

【视频】GStreamer+WebRTC(九):使用NVIDIA硬编解码

2)下载 GStreamer-bad 插件包源码注意要下载和 GStreamer版本对应的插件包3)下载NVIDIA硬编解码SDK最新的SDK下载地址注意 GStreamer 1.24.2 中调用的 NVIDIA Video_Codec_SDK 不是最新的,先使用下面的方法,查看gst-plugins-bad-1.24.2.tar.xz 对应的NVIDIA Video_Codec_SDK 的版本是多少。

郭老二 263

算法之分治算法

换句话说,将大问题分解为多个子问题、解决子问题、将子问题的解合并为原问题的解,这几步的效率为什么比直接解决原问题的效率更高?:快速排序是选取一个基准值,然后把数组分为两个子数组,一个子数组的元素比基准值小另一子数组的元素比基准值大,然后再对这两部分进行相同的划分操作,直至子数组只剩下一个元素。:桶排序的基本思想是将数据分散到多个桶,然后对每个桶内的元素进行排序,最后将各个桶的元素依次取出,从而得到一个有序数组。:该算法首先将点集分成两部分,然后分别找出两部分中的最近点对,最后再找出跨越两部分的最近点对。

cqdddgs的博客 5298

【第1章>第5节】SOM自组织映射网络的理论学习与MATLAB仿真

自组织映射网络(Self-Organizing Map,SOM)是一种无监督学习的人工神经网络,由芬兰学者Teuvo Kohonen于1981年提出,也被称为Kohonen网络。它的主要功能是将高维输入数据映射到低维(通常是二维)的离散网格上,同时保持输入数据的拓扑结构,即相邻的输入数据在映射后的网格上也相邻。

FPGA/MATLAB学习教程/源码/项目合作开发 403

分 治 算 法

一、什么是分治(what?) 分治,即分而治之。这是一种将大规模问题分解为若干个规模较小的相同子问题,进而求得最终结果的一种策略思想。 二、为什么要分治(why? ) 当一个问题规模较大,且 (1)原问题可分为若干个规模较小的子问题。 (2)子问题相互独立。 (3)子问题的解可以合并为原问题的解。 这时使用分治算法能更好的解决问题。 三、怎么使用分治(how?) 分治的步骤一般如下: ...

有朋自远方来,不亦乐乎。 4169

基于FPGA的相控阵雷达波束控制系统设计(2)

也就是在计算波控码时0,按2.8125递增,取遍-90

qq_43416206的博客 1812

【推荐100个unity插件】在unity快速生成3D人物自然姿势和动作,且支持按图像生成姿势—— Pose AI

PoseAI是一款基于肌肉的智能动画创作工具,通过神经网络和逆运动学技术实现自然姿势生成。主要功能包括:自动/手动角色设置、神经控制装备、姿态估计与预览等。工具支持从2D图像生成3D姿势,并能在编辑器中实时预览动画效果。其神经网络架构采用前馈网络与ResNet结合的方式,通过多层全连接和ReLU激活函数处理输入数据。PoseAI简化了动画制作流程,提供高效的姿势创作解决方案,适用于Unity游戏开发。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1362

分治算法思想及应用

一. 分治算法介绍 1. 分治算法思想 2. 分治算法适用条件 3. 分治算法的引入 二. 分治算法的应用 1. 快速排序 2. 快排划分函数求topk问题 3. 归并排序 4. 合并k个有序单链表 5. 对数时间求中位数算法思想

qq_41721746的博客 5040

Unity 横版游戏开发天花板?状态机、联机同步与横版动作游戏架构全都有

在 Unity 横版动作游戏开发领域,最耗时间的往往不是角色移动,而是整套“可扩展架构”的搭建。包括角色状态管理、敌人 AI、武器系统、关卡编辑器、联机同步、输入适配、UI 与存档系统等。2D Action Platformer Kit 的核心价值,并不只是“提供素材”,而是它已经帮开发者搭好了一整套适用于横版动作游戏的底层框架。

2403_88403568的博客 425

【BZOJ3745】[Coci2015]Norma cdq分治

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

aodanchui1057的博客 164

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

【BZOJ3745】Norma(CDQ分治)

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

weixin_30236595的博客 190

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

『分治』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

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的博客 264

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

[BZOJ3745][COCI2015]Norma[分治]

题意 题目链接 分析 考虑分治,记当前分治区间为 \(l,r\) 。 枚举左端点,然后发现右端点无非三种情况: 极大极小值都在左边; 有一个在左边; 极大极小值都在右边; 考虑递推 \(l\) 的同时递推最靠右的满足最大最小值在左边的位置 \(p_1,p_2\). 根据不同的情况计数即可,注意计算以 \(\rm mid\) 作为右端点的情况。 总时间复杂度为\((nlogn)\)。...

aqw145212的专栏 135

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 [分治]

Norma Time Limit: 20 SecMemory Limit: 64 MB[Submit][Status][Discuss] Description    Input   第1行,一个整数N;   第2~n+1行,每行一个整数表示序列a。 Output   输出答案对10^9取模后的结果。 ...

weixin_30723433的博客 77

【BZOJ 3745】Norma(CDQ分治)

题目链接 题目描述 求: ∑i=1n∑j=in(j−i+1)min(ai,ai+1,…aj)&nbsp;max(ai,ai+1,…aj)\sum_{i=1}^{n}\sum_{j=i}^{n} (j-i+1)min(a_i,a_{i+1}, \dots a_j)\ max(a_i,a_{i+1}, \dots a_j)i=1∑n​j=i∑n​(j−i+1)min(ai​,ai+1​,…aj​)&...

Yu Gi Oh! 457

【分治计数】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

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

雯舞 761

bzoj3745: [Coci2015]Norma 分治,单调队列

链接 bzoj 思路 首先\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\sum\limits_{k=i}^{j}max(a_k)\)可以用单调队列求解。参见? 求解此题目,我们分治。计算\([l,mid]\)对\([mid+1,r]\)的贡献。 我们从后向前枚举\(mid\)到\(l\),定义为\(x\)。(\(A\)为\([x,mid]\)中...

weixin_30606669的博客 117

BZOJ 3745: [Coci2015]Norma cdq分治

3745: [Coci2015]Norma Time Limit: 20 Sec  Memory Limit: 64 MB Submit: 403  Solved: 198 [Submit][Status][Discuss] Description Input 第1行,一个整数N; 第2~n+1行,每行一个整数表示序列a。 Output 输出答案对

BlackJack 455
上一篇: [bzoj4456][分治][Dijkstra]旅行者
下一篇: [bzoj4737][数论][DP]组合数问题
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值