【题解】 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) 之和 ...
随机推荐
- BZOJ3149 CTSC2013 复原 搜索
传送门 \(N \leq 20\)很适合暴搜-- 第二问最大独立集裸题,\(O(2^NN)\)的算法都能过-- 考虑第一问,使用搜索寻找可行解 每一次枚举一条弦的两个端点,通过位运算计算与其相交的弦的 ...
- BZOJ4883 棋盘上的守卫 基环树、Kruskal
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4883 题意:给出一个$N \times M$的棋盘,每个格子有权值.你需要每一行选中一 ...
- 转的一个Java基本功
京京肚肚撸代码 2017-04-11 00:21 很早之前, 记得一次面试, 面试官问存储金钱用什么数据类型? 当时只知道8种数据类型(boolean, byte, short, int, long, ...
- (转)Linux SSH配置和禁止Root远程登陆设置
原文 一.修改vi /etc/ssh/sshd_config 文件 1.修改默认端口:默认Port为22,并且已经注释掉了:修改是把注释去掉,并修改成其它的端口. 2.禁止root用户远程登陆:修改P ...
- Linux 小记 — Ubuntu 自动化配置
前言 工欲善其事,必先利其器.经过多次的重复配置 ubuntu 开发坏境,我终于决定花点时间总结一下,并将其写成一个自动化配置脚本.服务器实例:ubuntu 16.04,技术栈:shell,pytho ...
- Ubuntu16.04下使用rdesktop命令远程连接windows机器
前段时间在本机安装了ubuntu16.04桌面版,后来需要远程连接一台win10系统的跳转机,下面介绍使用rdesktop命令远程连接windows机器的操作记录:1)首先安装rdesktop工具 k ...
- centos7下部署iptables环境纪录(关闭默认的firewalle)
CentOS7默认的防火墙不是iptables,而是firewall.由于习惯了用iptables作为防火墙,所以在安装好centos7系统后,会将默认的firewall关闭,并另安装iptables ...
- Mysql抓包工具 - MySQL Sniffer 使用小结 (含带general_log日志)
在mysql运维工作中,一般会使用tcpdump做一些分析(直接读分析日志比较难以看明白,在数据库连接值高时使用):对于mysql实时的连接监控分析,通常会使用"mysqladmin/sho ...
- websocket(二)——基于node js 的同步聊天应用
https://github.com/sitegui/nodejs-websocket 1.用node搭建本地服务 npm install nodejs-websocket var ws = re ...
- 理解Vue 2.5的Diff算法
DOM"天生就慢",所以前端各大框架都提供了对DOM操作进行优化的办法,Angular中的是脏值检查,React首先提出了Virtual Dom,Vue2.0也加入了Virtual ...