【洛谷P2048】超级钢琴【堆】【主席树】

洛谷 P2048 主席树+区间修改 题目链接:https://www.luogu.org/problemnew/show/P2048   解题思路: 建立主席树对于第i颗线段树来说,区间(l,r)表示左端点是l-r的点,右端点是i的区间情况,对此第i颗线段树由i-1颗转移过来时只需要对当前线段树进行(1,i)区间都加上a[i]的值,那么这个操作就可以做区间更新,之后就是维护线段树区间最大值和位置就OK了. 然后先把i个最大值... 阅读详情

题目大意:

题目链接:https://www.luogu.org/problemnew/show/P2048
一个长度为 n n n的序列,求 m m m个长度在 [ l , r ] [l,r] [l,r]之间的子序列,使得这些子序列的元素之和最大。


思路:

显然暴力是很难搞的,考虑先用前缀和。
那么我们要求的就是
∑ i = 1 m m a x ( s u m [ k ] − s u m [ x − 1 ] ) ( x + l − 1 ≤ k ≤ x + r − 1 ) \sum^{m}_{i=1}max(sum[k]-sum[x-1])(x+l-1\leq k\leq x+r-1) i=1∑m​max(sum[k]−sum[x−1])(x+l−1≤k≤x+r−1)
考虑拆成 m m m次询问。
对于每一次询问,我们要求 m a x ( s u m [ k ] − s u m [ x − 1 ] ) max(sum[k]-sum[x-1]) max(sum[k]−sum[x−1])。显然对于固定的 x x x, s u m [ x − 1 ] sum[x-1] sum[x−1]也是固定的。所以我们只要求出 m a x ( s u m [ k ] ) max(sum[k]) max(sum[k])即可。
而 k k k是有范围要求的。当左端点为 x x x时,右端点的区间是固定的。我们每次要在这个区间内求最大,然后再求次大,接下来求第三大。
这显然就是一个静态区间第 k k k大的问题。直接主席树搞定就可以了。
那么我们要把所有的点作为左端点,然后求出相应的右端点,并插入堆里。每次取最大值然后维护一下就可以了。
其实这一步就是序列合并了。里面会讲解的更详细一些。
这样初始化 O ( n log ⁡ n ) O(n\log n) O(nlogn),每次询问 O ( log ⁡ n ) O(\log n) O(logn),共 m m m次询问,总时间复杂度就是 O ( m log ⁡ n ) O(m\log n) O(mlogn)。
要开 l o n g   l o n g long\ long long long。


代码:

#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <iostream>
#include <algorithm>
#define mp make_pair
using namespace std;
typedef long long ll;
priority_queue<pair<ll,int> > q;

const int N=500010,M=500010*25;
int n,m,L,R,T,tot,root[N],num[N];
ll sum[N],b[N],ans;

struct Tree
{
    int ls,rs,cnt;
}tree[M];

int build(int l,int r)
{
    int p=++tot;
    if (l==r) return p;
    int mid=(l+r)/2;
    tree[p].ls=build(l,mid);
    tree[p].rs=build(mid+1,r);
    return p;
}

int insert(int now,int l,int r,int k)
{
    int p=++tot;
    tree[p]=tree[now];
    tree[p].cnt++;
    if (l==r) return p;
    int mid=(l+r)/2;
    if (k<=mid) tree[p].ls=insert(tree[p].ls,l,mid,k);
        else tree[p].rs=insert(tree[p].rs,mid+1,r,k);
    return p;
}

int ask(int x,int y,int l,int r,int k)
{
    if (l==r) return l;
    int mid=(l+r)/2,sum=tree[tree[y].ls].cnt-tree[tree[x].ls].cnt;
    if (sum>=k)
        return ask(tree[x].ls,tree[y].ls,l,mid,k);
    else return ask(tree[x].rs,tree[y].rs,mid+1,r,k-sum);
}
//以上主席树板子
int main()
{
    scanf("%d%d%d%d",&n,&m,&L,&R);
    for (int i=1;i<=n;i++)
    {
    	int x;
        scanf("%d",&x);
        sum[i]=sum[i-1]+x;
        b[i]=sum[i];
    }
    sort(b+1,b+1+n); 
    T=unique(b+1,b+1+n)-b-1;
    root[0]=build(1,T);
    for (int i=1;i<=n;i++)
        root[i]=insert(root[i-1],1,T,lower_bound(b+1,b+1+T,sum[i])-b);
    for (int i=1;i<=n;i++)
    {
    	int l=i+L-1,r=min(i+R-1,n);
    	if (l>n) break;
    	ll x=b[ask(root[l-1],root[r],1,T,(r-l+1))];
    	q.push(mp(x-sum[i-1],i));
    	num[i]=1;
	}
    while (m--)
    {
    	ans+=q.top().first;
        int i=q.top().second;
        q.pop();
        num[i]++;
        int l=i+L-1,r=min(i+R-1,n);
        if (l<=n&&num[i]<=r-l+1)
        {
      		ll x=b[ask(root[l-1],root[r],1,T,(r-l+1-num[i]+1))];
      		//静态区间第k大=静态区间第r-l+1-k+1小
    		q.push(mp(x-sum[i-1],i));
		}
    }
    printf("%lld\n",ans);
    return 0;
}
SLAM+双目视觉实战:如何用光流法实现免标定板的实时自标定? 本文探讨了SLAM与双目视觉结合的光流法实现免标定板实时自标定的技术方案。通过光流法的运动感知能力和SLAM系统的协同架构,解决了传统标定方法依赖标定板的限制,实现了在未知环境中的自主、实时标定。文章详细介绍了光流法实现、SLAM与双目视觉的协同架构、实时自标定的关键技术及性能优化策略,为移动机器人和嵌入式设备提供了高效解决方案。 阅读详情

相关推荐

5V Qi低功耗无线充电发射端参考设计全解析

无线充电技术正加速渗透各类低功耗消费电子产品,而Qi标准下的BPP(Baseline Power Profile)定义了5W及以下功率传输的基础规范。5V输入的低功耗发射端设计看似简单,实则涉及能量传输效率、异物检测(FOD)、通信解调等多重平衡。从基本原理出发,Qi标准通过电磁感应实现电能无线传递,发射端由全桥驱动、LC谐振网络和ASK解调电路构成核心链路。在实际工程中,低成本与可靠性是关键,BPP方案因省去升压电路而拥有极高性价比,被广泛用于TWS耳机仓、智能门锁、蓝牙音箱底座等场景。本文围绕一套量产验

weixin_30786657的博客 501

洛谷 P2048超级钢琴 超详细题解

彻底搞懂P2048超级钢琴

Internet_Explore的博客 1175

[C++原创游戏实例]EGE2048程序员版

基于EGE开发的2048项目,数字由洛谷提交状态”AC","WA","TLE","MLE"等代替,程序简单,支持存档。版权所有,请勿转载,违者必究。

洛谷P2048 [NOI2010] 超级钢琴(RMQ+优先队列)

洛谷P2048 [NOI2010] 超级钢琴(RMQ+优先队列) 题意: 有 n 个音符,编号为 1 至 n 。第 i 个音符的美妙度为 AiA_iAi​ 我们要找到 k 段超级和弦组成的乐曲,每段连续的音符的个数 x 满足 L≤x≤RL\leq x\leq RL≤x≤R ,求乐曲美妙度的最大值。 思路: 三元组(x,l,r)表示左端点为x,右端点(l,r)。在设最大值的下标为t,则问题转化成求sum[t]−sum[i−1]sum[t]-sum[i-1]sum[t]−sum[i−1],因为sum[i-1]是

weixin_45722843的博客 225

避坑指南:ArcGIS 做莫兰指数分析,你的‘空间关系概念化’选对了吗?

本文深入解析了ArcGIS中莫兰指数分析的关键参数——'空间关系概念化'的选择策略。通过对比反距离法、固定距离法和K最近邻法的适用场景与影响机制,帮助研究者避免常见误区,提升空间自相关分析的准确性和解释力。特别针对全域莫兰指数和局域莫兰指数的计算差异提供了实用建议。

weixin_30872157的博客 805

深入解析SerDes系统中的时钟数据恢复电路(CDR)——基于Cadence的PLL/Bang-Bang/PS-PI架构实现与仿真

本文深入解析SerDes系统中的时钟数据恢复电路(CDR),重点探讨基于Cadence平台的PLL、Bang-Bang和PS-PI三种架构的实现与仿真。通过详细的技术对比和工程实践案例,揭示CDR在高速串行通信中的关键作用,并提供TSMC 28nm工艺下的优化策略与故障排查经验,助力工程师应对10Gbps以上SerDes设计挑战。

weixin_29202687的博客 249

P2048 [NOI2010] 超级钢琴

P2048 [NOI2010] 超级钢琴

zzzyyzz_的博客 141

MR2数据集实战:5步搞定多模态谣言检测模型训练(附完整代码)

本文详细介绍了如何使用MR2多模态数据集构建高精度谣言检测系统,涵盖环境配置、数据准备、多模态特征工程、模型架构设计、训练调优及部署优化等5个关键步骤。通过双线性融合技术处理文本、图像和网页三模态数据,解决特征对齐和模态冲突等工程难题,并提供完整代码实现和性能优化方案。

weixin_42657024的博客 239

洛谷P2048 [NOI2010] 超级钢琴

题面大意:给定长为nnn的序列,求长度在[L,R][L,R][L,R]区间和前kkk大子区间之和 首先区间和我们可以转换成前缀和之差 即sum[l,r]=s[r]−s[l−1]sum[l,r]=s[r]-s[l-1]sum[l,r]=s[r]−s[l−1] 暴力的做法是先枚举左端点lll,然后暴力枚举长度合法的区间对应的右端点rrr,找出这些区间和,然后取出前kkk大 显然过不了是吧…… 别急,我们再来看一下刚才这个暴力的思路 ans=∑(s[r]−s[l−1])(1≤l≤r≤n)ans=\sum(s[r]

Park Corsa's 优快云 Blog 393

华为od 面试八股文_Python_05_含答案

华为od 面试八股文_Python_05_含答案

MISAYAONE的博客 2560

药物对接仿真软件:HADDOCK_(9).结果分析方法

HADDOCK是一种强大的药物对接仿真工具,通过对生成的输出文件进行详细的分析,我们可以验证仿真结果的可靠性,并为进一步优化药物设计提供依据。常见的分析方法包括解读输出文件、使用可视化工具进行结构分析、评估对接模型的稳定性和准确性等。通过这些步骤,我们可以更全面地了解受体和配体的结合模式,从而提高药物设计的成功率。

kkchenjj的博客 1006

洛谷 P2048 [NOI2010]超级钢琴 主席树+堆

题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐。 这架超级钢琴可以弹奏出n个音符,编号为1至n。第i个音符的美妙度为Ai,其中Ai可正可负。 一个“超级和弦”由若干个编号连续的音符组成,包含的音符个数不少于L且不多于R。我们定义超级和弦的美妙度为其包含的所有音符的美妙度之和。两个超级和弦被认为是相同的,当且仅当这两个超级...

liangzihao1的博客 390

第四章节 Qt字符串QString详解

QString 的使用方式和 C++标准库的 std::string 字符串的非常相似。

m0_65635427的博客 890

[洛谷P2048] [NOI2010] 超级钢琴

洛谷题目链接:[NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐。 这架超级钢琴可以弹奏出n个音符,编号为1至n。第i个音符的美妙度为Ai,其中Ai可正可负。 一个“超级和弦”由若干个编号连续的音符组成,包含的音符个数不少于L且不多于R。我们定义超级和弦的美妙度为其包含的所有音符的美妙度之和。...

dengtun2502的博客 195

在MATLAB和Simulink中设计并仿真一个电动汽车整车动力学模型与控制系统

电动汽车(EV, Electric Vehicle)的动力学建模与控制仿真在车辆开发过程中起着至关重要的作用。通过Simulink进行整车动力学模型的构建和控制策略的验证,可以有效评估车辆性能、优化系统设计并降低开发成本。以下是如何在MATLAB和Simulink中设计并仿真一个电动汽车整车动力学模型与控制系统的详细步骤。通过上述步骤,我们成功设计并实现了基于Simulink的电动汽车整车动力学模型与控制仿真。该系统能够模拟复杂的整车动力学行为,验证控制策略的有效性,并通过优化设计提高车辆的性能和可靠性。

xiaoheshang_123的博客 549

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

P5283 [十二省联考2019]异或粽子(主席树+最大异或和)

传送门 题意:从所有区间长度大于l小于r的区间段中,选择最大的k个区间异或合相加,输出答案 这道题与P2048 [NOI2010]超级钢琴的思想相似,如果没有做过可以先去尝试一下超级钢琴。 P2048 [NOI2010]超级钢琴:传送门 题解:由于异或一个相同的数,异或值为0所以对于前缀和来说,sum[r]XORsum[l-1]其实就是r到(l-1)的异或合,所以对于求的第几大值我们可...

qq_40584551的博客 304

温度PID控制PLC程序

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

洛谷 P2048 [NOI2010]超级钢琴 解题报告

P2048 [NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐。 这架超级钢琴可以弹奏出n个音符,编号为1至n。第i个音符的美妙度为Ai,其中Ai可正可负。 一个“超级和弦”由若干个编号连续的音符组成,包含的音符个数不少于L且不多于R。我们定义超级和弦的美妙度为其包含的所有音符的美妙度之和。两个超级和弦...

weixin_30532987的博客 164

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

洛谷B2048 计算邮资(while)

题目描述 请根据邮件的重量和用户选择是否加急计算邮费。计算规则: 重量在1000 以内(包括),基本费8元; 超过1000 克的部分,每500 克加收超重费4元,不足500克部分按500克计算; 如果用户选择加急,多收5元。 输入格式 一行,包含一个正整数 x 和一个字符 c(y 或 n),之间用一个空格隔开,分别表示重量和是否加急。 如果字符是 y,说明选择加急;如果字符是 n,说明不加急。 输出格式 输出一行一个正整数,表示邮费。 ...

weixin_59268267的博客 1556

【题解】洛谷P2048 [NOI2010]超级钢琴

题目 洛谷P2048[NOI2010]超级钢琴 题解 题目简化后即求前k大的子区间。先求前缀和s[],枚举子区间的左端点l,再找最优的右端点r(即枚举s[l-1],再找符合条件的最大的s[r]),找最大的s[r]的过程即求静态区间最大值的过程,采用ST表。将上一步找出的子区间放入优先队列中维护,接下来每次取出一个区间和最大的元素,计入答案,并求与其左端点相同,s[r]第二大的区间。求次大的s[r]时,只需先找出最大的s[r]的位置,然后在它的左侧和右侧分别用ST表求s[r]的

zjgmartin的博客 473

#贪心,堆,RMQ#洛谷 2048 JZOJ 2226 超级钢琴

题目 分析 考虑一个maxx(x,l,r)maxx(x,l,r)maxx(x,l,r)表示以左端点为xxx,右端点在[l∼r][l\sim r][l∼r]的范围内的最大值,那么维护的最大值也就是s[mx]−s[l−1]s[mx]-s[l-1]s[mx]−s[l−1],而只有mxmxmx是变动的,所以可以用RMQ去求解,把这个三元组扔进一个大根堆里面,跑kkk次,但是处理完一个三元组后需要把它拆成...

lemondinosaur的博客 338

洛谷 P2048 [NOI2010]超级钢琴

题面题意给出一个序列,求和最大的k个连续子序列的和,且连续子序列长度在l与r之间.做法首先预处理出前缀和,我们可以从左端点开始考虑,若左端点为i,则右端点在i+l-1与i+r-1之间,那么可以计算出这些区间的最大值,然后放到堆里去,每次从堆中取出最大值加到ans中后再将该区间左右两区间的最大值放入堆中. 也就是说我们维护一个结构体(i,l,r,mx)表示左端点为i,右端点在l,r之间的,且这些区间

yzyyylx的博客 484

洛谷 T39016 kry loves 2048(贪心,桶排序) 题解

题目来源: https://www.luogu.org/problemnew/show/T39016 题目描述:   题目背景 kls是一个人赢。 题目描述 kls最近在玩一款类似2048的游戏,规则是这样的: 一开始,有 nn 个方块,每个方块上有一个 11 到 mm 的整数。 kls可以进行两种操作: 选择两个数字相同的方块(不一定要相邻),将它们合并成一个数字为原来的...

摇摇乐的博客 880

luogu 2048 超级钢琴 贪心+堆+RMQ

此题求长度在l,r,之间内的区间的前k大之和 1.静态区间第k大,不就是主席树么! 可是不会写啊,以后填坑吧 2.优先队列 固定左端点,选取以此为起点的长度l<=x<=r的区间,固定此范围后寻找此范围内最大所到位置t; 由于左端点已经固定且每次i相同的操作下只将一个点放入优先队列,故不会出现重复; 注意:rmq维护的是最大的前缀和所在位置,返回的也是位置 #inclu...

weixin_30912051的博客 121
上一篇: 【洛谷P1606】白银莲花池【最短路】
下一篇: 【洛谷P5283】异或粽子【Trie】【堆】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值