cogs468 [NOI2010]超级钢琴
http://cogs.pro:8080/cogs/problem/problem.php?pid=468
emmmmmm
今天考试爆炸顺便切了这题
这题我肯定不会啦然后看一sol。。
固定一个右端点,然后\(sum(A[l:r])=S[r]-S[l]\)
对于每个右端点,在st表上查询最小的S[l](\(Min\ S[r-R:r-L]\))并扔进堆里
然后选一个最大的区间统计答案
然后你要对于这个r删除这个l
只需要分开区间就行了
假设本来r对应的区间是\([a,b]\),会分裂成\([a,l-1],[l+1,b]\)
没了
跑的还挺快
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<queue>
using namespace std;
#define rg register
#define vd void
#define sta static
#define il inline
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int maxn=500002;
int A[maxn],st[19][maxn],log[maxn];
il int orz(rg int x,rg int y){return A[x]<A[y]?x:y;}
il int query(rg int l,rg int r){
rg int p=log[r-l+1];
return orz(st[p][l],st[p][r-(1<<p)+1]);
}
struct yyb{int key,r,ll,lr;};
bool operator <(const yyb&a,const yyb&b){return a.key<b.key;}
priority_queue<yyb>que;
main(){
int n=gi(),tjj=gi(),L=gi(),R=gi();
for(rg int i=1;i<=n;++i)A[i+1]=gi(),st[0][i]=i;
++n,st[0][n]=n;
for(rg int i=1;i<=n;++i)A[i]+=A[i-1];
for(rg int i=1;i<=n;++i){
log[i]=log[i-1];
if((1<<(log[i]+1))==i)++log[i];
}
for(rg int i=1;i<=log[n];++i)
for(rg int j=n-(1<<i)+1;j;--j)
st[i][j]=orz(st[i-1][j],st[i-1][j+(1<<(i-1))]);
for(rg int i=1;i<=n;++i)if(i>L)que.push((yyb){A[i]-A[query(max(1,i-R),i-L)],i,max(1,i-R),i-L});
long long ans=0;
yyb x;int k,r,ll,lr;
while(tjj--){
x=que.top();que.pop();
r=x.r,ll=x.ll,lr=x.lr;
ans+=x.key;k=query(ll,lr);
if(ll<=k-1)que.push((yyb){A[r]-A[query(ll,k-1)],r,ll,k-1});
if(k+1<=lr)que.push((yyb){A[r]-A[query(k+1,lr)],r,k+1,lr});
}printf("%lld\n",ans);
return 0;
}
cogs468 [NOI2010]超级钢琴的更多相关文章
- 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 ...
- NOI2010超级钢琴 2
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 1296 Solved: 606[Submit][Status ...
- BZOJ 2006: [NOI2010]超级钢琴( RMQ + 堆 )
取最大的K个, 用堆和RMQ来加速... ----------------------------------------------------------------- #include<c ...
- BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表
BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐 ...
- bzoj2006 [NOI2010]超级钢琴 (及其拓展)
bzoj2006 [NOI2010]超级钢琴 给定一个序列,求长度在 \([L,\ R]\) 之间的区间和的前 \(k\) 大之和 \(n\leq5\times10^5,\ k\leq2\times1 ...
- P2048 [NOI2010]超级钢琴(RMQ+堆+贪心)
P2048 [NOI2010]超级钢琴 区间和--->前缀和做差 多次查询区间和最大--->前缀和RMQ 每次取出最大的区间和--->堆 于是我们设个3元组$(o,l,r)$,表示左 ...
- 洛谷 P2048 [NOI2010]超级钢琴 解题报告
P2048 [NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为 ...
- bzoj千题计划162:bzoj2006: [NOI2010]超级钢琴
http://www.lydsy.com/JudgeOnline/problem.php?id=2006 输出最大的k个 sum[r]-sum[l-1] (L<=r-l+1<=R) 之和 ...
随机推荐
- asp.net MVC4 框架揭秘 读书笔记系列3
IIS/ASP.net管道 本节全部用图形表示便于理解和记忆 1.3.1 IIS5.x与asp.net 1.3.2 IIS 6.0与asp.net 1.3.3 IIS7.0与asp.net 基于IIS ...
- 魅力python------if - else 语句
引入:if-else的作用,满足一个条件做什么,否则做什么. if-else语句语法结构 if 判断条件: 要执行的代码 else: 要执行的代码 判断条件:一般为关系表达式或bool类型的值 执行过 ...
- Java代理全攻略【有瑕疵:字节码生成部分没看到,最后两节没仔细看,累了】
Java代理 1.代理模式 定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象. 其实就是委托.聚合.中间人. 为了保持行为的 ...
- * args 和 **kwargs
def func(*args, **kwargs): print(args,kwargs) func("对", "哦",o=4, k=0) 结果---> ...
- Alpha 冲刺报告(6/10)
Alpha 冲刺报告(6/10) 队名:洛基小队 峻雄(组长) 已完成:实现角色的移动. 明日计划:关于角色的属性设计. 剩余任务:角色的属性脚本 困难:角色的属性以及具体的编码 ---------- ...
- [转载并收藏]JavaScript 疲劳终极指南:我们行业的真相
这篇文章说的深得我心,特别是前半段. 特此收藏. 中文译文:http://www.zcfy.cc/article/the-ultimate-guide-to-javascript-fatigue-re ...
- 2016-3-19日小结:scrollTop
<div id="div1" style="padding: 0; position:absolute;width: 200px;height: 200px;< ...
- [HAOI2018]奇怪的背包
题目 暴力\(dp\)好有道理啊 于是我们来个反演吧 考虑一个体积序列\(\{v_1,v_2,...v_n\}\)能凑成\(w\)的条件 显然是 \[v_1x_1+v_2x_2+...+v_nx_n\ ...
- YII缓存整理
缓存 缓存是用于提升网站性能的一种即简单又有效的途径.通过存储相对静态的数据至缓存以备所需,我们可以省去生成这些数据的时间.在 Yii 中使用缓存主要包括配置和访问缓存组件 . 如下的应用配置指定了一 ...
- C++的四种显示类型转换
static_cast 除了含有底层const的类型转换,其他的一般都可以用这个static_cast const_cast 专门用来转换底层const,将常量转换为非常量,但是假如这个量如果本身是常 ...