【题解】 bzoj2006: [NOI2010]超级钢琴 (ST表+贪心)
Solution
- 不会,看的题解
Attention
- 哇痛苦,一直不会打\(ST\)表,我是真的菜啊qwq
- 预处理
Log[1]=0;two[0]=1;
for(int i=2;i<=n;i++)Log[i]=Log[i>>1]+1;
for(int i=1;i<=24;i++)two[i]=two[i-1]*2;
for(int i=1;i<=n;i++)ST[i][0]=i;
for(int i=1;i<=24;i++){
for(int j=0;j+two[i]<=n+1;j++){
ST[j][i]=mina(ST[j][i-1],ST[j+two[i-1]][i-1]);
}
}
- 我是真的菜qwq
Code
//It is coded by ning_mew on 7.19
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn=5e5+7,inf=(1<<31);
int n,k,L,R;
int Log[maxn],ST[maxn][25];
LL sum[maxn],two[25],ans=0;
struct Node{
LL sum;int r,nl,nr,M;
friend bool operator < (const Node &A,const Node &B){return A.sum<B.sum;}
};
priority_queue<Node>Q;
int mina(int x,int y){
if(sum[x]<sum[y])return x;return y;
}
int quary(int x,int y){
int kkk=Log[y-x+1];
return mina(ST[x][kkk],ST[y-two[kkk]+1][kkk]);
}
int main(){
scanf("%d%d%d%d",&n,&k,&L,&R);
Log[1]=0;two[0]=1;
for(int i=1;i<=n;i++){scanf("%lld",&sum[i]);sum[i]+=sum[i-1];}
for(int i=2;i<=n;i++)Log[i]=Log[i>>1]+1;
for(int i=1;i<=24;i++)two[i]=two[i-1]*2;
for(int i=1;i<=n;i++)ST[i][0]=i;
for(int i=1;i<=24;i++){
for(int j=0;j+two[i]<=n;j++){
ST[j][i]=mina(ST[j][i-1],ST[j+two[i-1]][i-1]);
}
}
for(int i=L;i<=n;i++){
int l=max(0,i-R),r=i-L;
Node box;box.r=i;box.nl=l;box.nr=r;
box.M=quary(l,r);box.sum=sum[i]-sum[box.M];
Q.push(box);
}
while(k){
k--;Node box=Q.top();Q.pop();
ans+=box.sum;
Node A,B;
if(box.nl<box.M){
A.nl=box.nl;A.nr=box.M-1;A.M=quary(A.nl,A.nr);
A.r=box.r;A.sum=sum[A.r]-sum[A.M];
Q.push(A);
}
if(box.M<box.nr){
B.nl=box.M+1;B.nr=box.nr;B.M=quary(B.nl,B.nr);
B.r=box.r;B.sum=sum[B.r]-sum[B.M];
Q.push(B);
}
}printf("%lld\n",ans);
return 0;
}
博主蒟蒻,随意转载。但必须附上原文链接:http://www.cnblogs.com/Ning-Mew/,否则你会场场比赛暴0!!!
【题解】 bzoj2006: [NOI2010]超级钢琴 (ST表+贪心)的更多相关文章
- [BZOJ2006][NOI2010]超级钢琴(ST表+堆)
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 3679 Solved: 1828[Submit][Statu ...
- 【BZOJ2006】[NOI2010]超级钢琴 ST表+堆
[BZOJ2006][NOI2010]超级钢琴 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以 ...
- 【BZOJ-2006】超级钢琴 ST表 + 堆 (一类经典问题)
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2473 Solved: 1211[Submit][Statu ...
- [BZOJ2006] [NOI2010]超级钢琴 主席树+贪心+优先队列
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 3591 Solved: 1780[Submit][Statu ...
- BZOJ 2006: [NOI2010]超级钢琴 [ST表+堆 | 主席树]
题意: 一个序列,求k个不相同的长度属于\([L,R]\)的区间使得和最大 前缀和,对于每个r找最小的a[l] 然后我yy了一个可持久化线段树做法...也许会T 实际上主席树就可以了,区间k小值 然后 ...
- BZOJ 2006: [NOI2010]超级钢琴 ST表+堆
开始想到了一个二分+主席树的 $O(n\log^2 n)$ 的做法. 能过,但是太无脑了. 看了一下题解,有一个 ST 表+堆的优美解法. 你发现肯定是选取前 k 大最优. 然后第一次选的话直接选固定 ...
- bzoj 2006 [NOI2010]超级钢琴——ST表+堆
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2006 每个右端点的左端点在一个区间内:用堆记录端点位置.可选区间,按价值排序:拿出一个后也许 ...
- 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 ...
- bzoj千题计划162:bzoj2006: [NOI2010]超级钢琴
http://www.lydsy.com/JudgeOnline/problem.php?id=2006 输出最大的k个 sum[r]-sum[l-1] (L<=r-l+1<=R) 之和 ...
随机推荐
- 多线程-synchronized、lock
1.什么时候会出现线程安全问题? 在多线程编程中,可能出现多个线程同时访问同一个资源,可以是:变量.对象.文件.数据库表等.此时就存在一个问题: 每个线程执行过程是不可控的,可能导致最终结果与实际期望 ...
- CentOS 6下gcc升级的操作记录(由默认的4.4.7升级到6.4.0版本)
机房一台centos6.9机器部署了jenkins发布系统,开发人员在用node编译js,发现依赖的gcc版本低了,故需要将gcc升级到高版本(至少5.0版本以上),这里选择升级到6.4.0版本,下面 ...
- Linux下通过受限bash创建指定权限的账号
在日常业务运维中,有时为了配合解决问题,需要给非运维人员开通系统账号,用于查询日志或代码.通常为了系统安全或避免不必要的误操作等目的,会将账号权限降至最低.下面介绍下在Linux下通过受限bash创建 ...
- snmpd.conf 配置
开启snmp后,一些指标获取不到,需要配置snmpd.conf文件,如下图所示 参考文章:http://blog.csdn.net/flyingfalcon/article/details/47831 ...
- BugPhobia开发篇章:Beta阶段第IX次Scrum Meeting
0x01 :Scrum Meeting基本摘要 Beta阶段第九次Scrum Meeting 敏捷开发起始时间 2015/12/25 00:00 A.M. 敏捷开发终止时间 2015/12/28 23 ...
- MCMC等采样算法
一.直接采样 直接采样的思想是,通过对均匀分布采样,实现对任意分布的采样.因为均匀分布采样好猜,我们想要的分布采样不好采,那就采取一定的策略通过简单采取求复杂采样. 假设y服从某项分布p(y),其累积 ...
- SpringBoot初识
作用 SpringBoot是为了简化Spring应用的创建.运行.调试.部署等等而出现的,使用它可以专注业务开发,不需要太多的xml的配置. 核心功能 1.内嵌Servlet容器(tomcat.jet ...
- jquery judge element exist
http://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-exists/ if ( $( " ...
- 解决vmware与主机无法连通的问题
我们选择NAT方式,来实现Ubuntu的静态IP地址配置. 打开VMware,在顶部依次选择:编辑 > 虚拟网路编辑器,打开虚拟网路编辑器:去掉VMnet0和VMnet1,只保留VMnet8.然 ...
- 关于flask自带web应用服务器Werkzeug 使用requests请求时出现的错误。
先说明一下当时的情况,下午遇到一个需求需要先从jd那边拿到图片然后上传到本地的cdn服务器来获取对应的ident 和地址. 于是就需要首先拿到京东的图片url,然后按照图片url去请求图片到内存然后再 ...