[BZOJ2006] [NOI2010]超级钢琴 主席树+贪心+优先队列
2006: [NOI2010]超级钢琴
Time Limit: 20 Sec Memory Limit: 552 MB
Submit: 3591 Solved: 1780
[Submit][Status][Discuss]
Description
Input
Output
只有一个整数,表示乐曲美妙度的最大值。
Sample Input
3
2
-6
8
Sample Output
【样例说明】
共有5种不同的超级和弦:
音符1 ~ 2,美妙度为3 + 2 = 5
音符2 ~ 3,美妙度为2 + (-6) = -4
音符3 ~ 4,美妙度为(-6) + 8 = 2
音符1 ~ 3,美妙度为3 + 2 + (-6) = -1
音符2 ~ 4,美妙度为2 + (-6) + 8 = 4
最优方案为:乐曲由和弦1,和弦3,和弦5组成,美妙度为5 + 2 + 4 = 11。
HINT
Source
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<queue>
#define maxn 500055
#define ll long long
using namespace std;
int sum[maxn*],ls[maxn*],rs[maxn*],rt[maxn],cnt;
int n,K,L,R;
int pre[maxn],h[maxn],num[maxn],size[maxn];
struct data {
int w,pos;
bool operator <(const data tmp) const{return w<tmp.w;}
};
priority_queue<data> q;
void insert(int &x,int p,int l,int r,int k) {
x=++cnt;
sum[x]=sum[p]+,ls[x]=ls[p],rs[x]=rs[p];
if(l==r) {return;}
int mid=l+r>>;
if(k<=mid) insert(ls[x],ls[p],l,mid,k);
else insert(rs[x],rs[p],mid+,r,k);
}
int find(int x,int p,int l,int r,int k) {
// cout<<l<<' '<<r<<' '<<sum[ls[p]]<<' '<<sum[ls[x]]<<endl;
if(l==r) return l;
int mid=l+r>>;
if(sum[ls[p]]-sum[ls[x]]>=k) return find(ls[x],ls[p],l,mid,k);
else return find(rs[x],rs[p],mid+,r,k-(sum[ls[p]]-sum[ls[x]]));
}
int main() {
scanf("%d%d%d%d",&n,&K,&L,&R);
h[n+]=;
for(int i=;i<=n;i++) {
int tmp;scanf("%d",&tmp);
pre[i]=pre[i-]+tmp;
h[i]=pre[i];
}
sort(h+,h+n+);
int nn=;
for(int i=;i<=n+;i++) if(h[i]!=h[nn]) h[++nn]=h[i];
int hh=lower_bound(h+,h+nn+,)-h;
insert(rt[],rt[],,n,hh);
for(int i=;i<=n;i++) {
num[i]=lower_bound(h+,h+nn+,pre[i])-h;
insert(rt[i+],rt[i],,n,num[i]);
}
for(int i=L;i<=n;i++) {
if(i-L<) continue;
int w=find(rt[max(i-R,)],rt[max(i-L+,)],,n,size[i]+);
q.push((data){pre[i]-h[w],i});
}
ll ans=;
for(int i=;i<=K;i++) {
int w=q.top().w,pos=q.top().pos;
ans+=(ll)w;
size[pos]++;
q.pop();
int l=max(pos-R+,),r=pos-L+;
if(size[pos]>=r-l+) continue;
w=find(rt[l-],rt[r],,n,size[pos]+);
w=pre[pos]-h[w];
q.push((data){w,pos});
}
printf("%lld\n",ans);
}
[BZOJ2006] [NOI2010]超级钢琴 主席树+贪心+优先队列的更多相关文章
- bzoj2006 noi2010 超级钢琴 主席树 + 优先队列
Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2435 Solved: 1195 Description 小 Z是一个小有名气的钢琴家,最近C博士送 ...
- [NOI2010]超级钢琴 主席树
[NOI2010]超级钢琴 链接 luogu 思路 和12省联考的异或粽子一样. 堆维护n个左端点,每次取出来再放回去次 代码 #include <bits/stdc++.h> #defi ...
- bzoj2006 [NOI2010]超级钢琴 (及其拓展)
bzoj2006 [NOI2010]超级钢琴 给定一个序列,求长度在 \([L,\ R]\) 之间的区间和的前 \(k\) 大之和 \(n\leq5\times10^5,\ k\leq2\times1 ...
- BZOJ2006 [NOI2010]超级钢琴 【堆 + RMQ】
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MB Submit: 3446 Solved: 1692 [Submit][Sta ...
- [BZOJ2006][NOI2010]超级钢琴(ST表+堆)
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 3679 Solved: 1828[Submit][Statu ...
- bzoj千题计划162:bzoj2006: [NOI2010]超级钢琴
http://www.lydsy.com/JudgeOnline/problem.php?id=2006 输出最大的k个 sum[r]-sum[l-1] (L<=r-l+1<=R) 之和 ...
- BZOJ2006[NOI2010]超级钢琴——堆+主席树
题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为Ai,其中 ...
- [NOI2010][bzoj2006] 超级钢琴 [主席树/ST表+堆]
题面: 传送门 思路: 首先容易想到用堆维护的O(n2logn)暴力 那么肯定就是在这个基础上套数据结构了[愉快] 然而我因为过于蒟蒻......只想得到主席树暴力***过去的方法 大概就是把前缀和算 ...
- 【贪心 计数】bzoj2006: [NOI2010]超级钢琴
这么经典的贪心我怎么现在才做啊…… Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐. 这架超级钢琴可以弹奏出n个 ...
随机推荐
- VS2015中常用快捷键的修改推荐
首先,在VS2015中修改快捷键的步骤如下: 工具--选项--环境--键盘. 如图: 然后就是修改快捷键:(以下是个人的使用习惯,仅供参考) 1.编辑.设置选定内容的格式.设置为ctrl+E,Ctrl ...
- awk,rsync,重启,maxdepth一层目录,登录,开机自启动
有100个日志文件,每个文件大约1G,每条日志都以 “H:i:s” 的时间格式开头,如: 05:02:04 xxx yyy zzz 因为是日志文件,所以肯定以时间为顺序的,现在可以确定的是,在某个文件 ...
- DataBase -- Operator
TOP子句用于规定要返回的记录的数目. SELECT TOP number | percent column_name FROM table_name LIKE操作符用于在WHERE子句中搜索列的指定 ...
- 【题解】SDOI2011消耗战
虚树模板题~洛谷P2495 第一次写虚树,感觉好厉害呀~首先,这道题目的树形dp是非常显然的,要控制一个点&其子树所有点,要么在子树内部割边,要么直接切点该点与父亲的连边.所以dp[u]表示控 ...
- 用伪类实现一个div的宽度和高度是固定百分比
遇到一个题目:一个div宽度是固定百分比的情况下,如何设置高度是宽度的80% 看到题目的第一反应是用js控制,获取到div的宽度之后再用宽度的80%来设置div的高度,但是如何在不用js的情况下,只用 ...
- 【POJ 3169 Layout】
Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 12565Accepted: 6043 Description Like every ...
- 莫比乌斯反演题表II
bzoj3994:[SDOI2015]约数个数和 **很好推+有个小结论bzoj3309:DZY Loves Math ***很好推+线筛某函数/卡常bzoj4816:[Sdoi2017]数字表格 * ...
- 线程 condition_variable
http://www.cnblogs.com/haippy/p/3252041.html 理解wait():当前线程调用 wait() 后将被阻塞(此时当前线程应该获得了锁(mutex).在线程被阻塞 ...
- 正确答案 [Hash/枚举]
正确答案 题目描述 小H与小Y刚刚参加完UOIP外卡组的初赛,就迫不及待的跑出考场对答案. "吔,我的答案和你都不一样!",小Y说道,"我们去找神犇们问答案吧" ...
- HDU 多校对抗赛第二场 1004 Game
Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...