[BZOJ 2006] 超级钢琴
Link:
https://www.lydsy.com/JudgeOnline/problem.php?id=2006
Algorithm:
对于此类区间最值类问题,我们可以通过控制一端不变来寻找当前点的最值,再综合比较
此题中,在求完前缀和后,在左端点确定的情况下,只要寻找前缀和最大的右端点
为了快速寻找最优的右端点位置,我们需要RMQ来进行维护
由于不存在修改操作而只有查询,那么ST List O(1)查询 O(n)修改 的特性就能充分利用
在求出前缀和后用ST list维护区间MAX即可
定义一个四元组(i,L,R,pos),其中,i表示固定下的左端点,L,R表示右端点存在的区间,pos表示右端点此时最优位置
为了不涉及到ST list不支持的删除操作,在选定pos后四元组分为两段:
$(i,L,R,pos)−>(i,L,pos−1,pos′)+(i,pos+1,R,pos′′)$
这样用优先队列每次取出最优解即可
Code:
//by NewErA
#include<bits/stdc++.h> using namespace std;
typedef long long ll; inline int read()
{
char ch;int num,f=;
while(!isdigit(ch=getchar())) f|=(ch=='-');
num=ch-'';
while(isdigit(ch=getchar())) num=num*+ch-'';
return f?-num:num;
} struct SP
{
int i,l,r,pos;
}; const int MAXN=;
int n,k,L,R,a[MAXN],log_2[MAXN],st[MAXN][];
ll res=; void init()
{
log_2[]=;
for(int i=;i<=n;i++)
{
log_2[i]=log_2[i-];
if(<<(log_2[i]+)==i) log_2[i]++;
} for(int i=n;i>=;i--)
{
st[i][]=i;
for(int j=;(i+(<<j)-)<=n;j++)
if(a[st[i][j-]]>a[st[i+(<<(j-))][j-]]) st[i][j]=st[i][j-];
else st[i][j]=st[i+(<<(j-))][j-];
}
} int Query(int l,int r)
{
int x=log_2[r-l+];
if(a[st[l][x]]>a[st[r-(<<x)+][x]]) return st[l][x];
else return st[r-(<<x)+][x];
} inline bool operator < (SP x,SP y) //运算符重载
{
return a[x.pos]-a[x.i-]<a[y.pos]-a[y.i-];
} int main()
{
n=read();k=read();L=read();R=read();
for(int i=;i<=n;i++) a[i]=read();
for(int i=;i<=n;i++) a[i]+=a[i-]; init(); priority_queue<SP,vector<SP> > Q;
for(int i=;i<=n;i++)
if(i+L-<=n)
{
int t=min(i+R-,n);
Q.push(SP{i,i+L-,t,Query(i+L-,t)});
}
while(k--)
{
SP cur=Q.top();Q.pop();
res+=a[cur.pos]-a[cur.i-];
if(cur.pos->=cur.l) Q.push(SP{cur.i,cur.l,cur.pos-,Query(cur.l,cur.pos-)});
if(cur.pos+<=cur.r) Q.push(SP{cur.i,cur.pos+,cur.r,Query(cur.pos+,cur.r)});
}
cout << res;
return ;
}
1、priority_queue的运算符重载问题(Updating)
2、只需要RMQ的查询操作时尽量用ST List
3、如果删除1个或少量数据的操作难以实现时,考虑将原数据分段,递归式地考虑每一段的情况
[BZOJ 2006] 超级钢琴的更多相关文章
- BZOJ 2006 超级钢琴(划分树+优先队列)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2006 题意: 给出一个数列A,L,R,构造出一个新的集合,集合中的数字为A中任意连续t( ...
- bzoj 2006 超级钢琴 —— ST表
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2006 本来应该是可以用主席树,找区间最小值,取出来后再找那段区间的次小值...... 但也可 ...
- BZOJ 2006 超级钢琴(堆+主席树)
很好的一道题. 题意:给出长度为n的数列,选择k个互不相同的区间,满足每个区间长度在[L,R]内,求所有选择的区间和的总和最大是多少.(n,k<=5e5). 首先将区间和转化为前缀和之差,那么我 ...
- [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆)
[BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆) 题面 给出一个长度为n的序列,选k段长度在L到R之间的区间,一个区间的值等于区间内所有元素之的和,使得k个区间的值之和最大.区 ...
- BZOJ 2006: [NOI2010]超级钢琴
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2613 Solved: 1297[Submit][Statu ...
- Bzoj 2006: [NOI2010]超级钢琴 堆,ST表
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2222 Solved: 1082[Submit][Statu ...
- BZOJ 2006: [NOI2010]超级钢琴( RMQ + 堆 )
取最大的K个, 用堆和RMQ来加速... ----------------------------------------------------------------- #include<c ...
- 【BZOJ 2006】2006: [NOI2010]超级钢琴(RMQ+优先队列)
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2792 Solved: 1388 Description 小 ...
- 2006: [NOI2010]超级钢琴 - BZOJ
Description小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为 ...
随机推荐
- MySQL使用笔记(四)数据的操作
By francis_hao Dec 14,2016 数据的操作包括插入数据记录.更新数据记录和删除数据记录. 插入数据记录 插入单条数据记录 field表示的字段名和value表示数据要一一对 ...
- greendao的基本操作
1.先配置项目的builder.gradle // Top-level build file where you can add configuration options common to all ...
- egrep对于conf文件中去掉#注释,排除无用项
[root@localhost conf]# egrep -v "#|^$" nginx.conf.default > nginx.conf dd
- HTML5 视频直播
目前视频直播,尤其是移动端的视频直播已经火到不行了,基本上各大互联网公司都有了自己的直播产品,所以对于直播的一些基本知识和主要技术点也要有所了解,本次分享就向大家介绍一下其中的奥秘. 内容大体框架: ...
- 【Android开发日记】之入门篇(四)——Android四大组件之Activity
在Android中,无论是开发者还是用户,接触最多的就算是Activity.它是Android中最复杂.最核心的组件.Activity组件是负责与用户进行交互的组件,它的设计理念在很多方面都和Web页 ...
- 转:mybatis 高级结果映射(http://blog.csdn.net/ilovejava_2010/article/details/8180521)
高级结果映射 MyBatis的创建基于这样一个思想:数据库并不是您想怎样就怎样的.虽然我们希望所有的数据库遵守第三范式或BCNF(修正的第三范式),但它们不是.如果有一个数据库能够完美映射到所有应用程 ...
- [BZOJ1026][SCOI2009]windy数 解题报告|数位dp
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 一直 ...
- [BZOJ1040] [ZJOI2008]骑士 解题报告
Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火 ...
- HDU 2036 改革春风吹满地 (数学)
题目链接 Problem Description " 改革春风吹满地, 不会AC没关系; 实在不行回老家, 还有一亩三分地. 谢谢!(乐队奏乐)" 话说部分学生心态极好,每天就知道 ...
- Linux下安装mantis配置指南【转】
转自:http://blog.csdn.net/xabc3000/article/details/6858229 目录(?)[-] Linux下安装mantis配置指南 配置Linux下的Apache ...