[NOI2010]超级钢琴 主席树
[NOI2010]超级钢琴
链接
思路
和12省联考的异或粽子一样。
堆维护n个左端点,每次取出来再放回去次
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int _=5e5+7,INF=0x3f3f3f3f;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int n,k,l,r,sum[_],rt[_];
namespace seg {
struct node {int l,r,siz;}e[_*20];
int cnt;
void insert(int l,int r,int k,int x,int &y) {
e[y=++cnt]=e[x];
e[y].siz++;
if(l==r) return;
int mid=(l+r)>>1;
if(k<=mid) insert(l,mid,k,e[x].l,e[y].l);
else insert(mid+1,r,k,e[x].r,e[y].r);
}
int query(int l,int r,int k,int x,int y) {
if(l==r) return l;
int mid=(l+r)>>1,h=e[e[y].l].siz-e[e[x].l].siz;
if(k<=h) return query(l,mid,k,e[x].l,e[y].l);
else return query(mid+1,r,k-h,e[x].r,e[y].r);
}
}
struct node {
int val,l,r,k,id;
bool operator < (const node &b) const {
return val<b.val;
}
};
priority_queue<node> q;
int lsh[_];
int main() {
n=read(),k=read(),l=read(),r=read();
for(int i=1;i<=n;++i) lsh[i]=sum[i]=sum[i-1]+read();
sort(lsh+1,lsh+1+n);
int len=unique(lsh+1,lsh+1+n)-lsh-1;
for(int i=1;i<=n;++i) sum[i]=lower_bound(lsh+1,lsh+1+len,sum[i])-lsh;
for(int i=1;i<=n;++i) seg::insert(1,n,sum[i],rt[i-1],rt[i]);
for(int i=0;i<=n-l;++i) {
int L=i+l,R=min(i+r,n);
q.push(node{lsh[seg::query(1,n,R-L+1,rt[L-1],rt[R])]-lsh[sum[i]],L,R,R-L+1,i});
}
ll ans=0;
while(k --> 0) {
node u=q.top();q.pop();
ans+=u.val;
u.k--;
if(u.k<=0) continue;
u.val=lsh[seg::query(1,n,u.k,rt[u.l-1],rt[u.r])]-lsh[sum[u.id]];
q.push(u);
}
cout<<ans<<"\n";
return 0;
}
[NOI2010]超级钢琴 主席树的更多相关文章
- [BZOJ2006] [NOI2010]超级钢琴 主席树+贪心+优先队列
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 3591 Solved: 1780[Submit][Statu ...
- bzoj2006 noi2010 超级钢琴 主席树 + 优先队列
Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2435 Solved: 1195 Description 小 Z是一个小有名气的钢琴家,最近C博士送 ...
- [NOI2010][bzoj2006] 超级钢琴 [主席树/ST表+堆]
题面: 传送门 思路: 首先容易想到用堆维护的O(n2logn)暴力 那么肯定就是在这个基础上套数据结构了[愉快] 然而我因为过于蒟蒻......只想得到主席树暴力***过去的方法 大概就是把前缀和算 ...
- BZOJ 2006 NOI2010 超级钢琴 划分树+堆
题目大意:给定一个序列.找到k个长度在[l,r]之间的序列.使得和最大 暴力O(n^2logn),肯定过不去 看到这题的第一眼我OTZ了一下午... 后来研究了非常久别人的题解才弄明确怎么回事...蒟 ...
- 洛谷 P2048 [NOI2010]超级钢琴 解题报告
P2048 [NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为 ...
- [洛谷P2048] [NOI2010] 超级钢琴
洛谷题目链接:[NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号 ...
- 【BZOJ2006】[NOI2010]超级钢琴 ST表+堆
[BZOJ2006][NOI2010]超级钢琴 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以 ...
- BZOJ2006 [NOI2010]超级钢琴 【堆 + RMQ】
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MB Submit: 3446 Solved: 1692 [Submit][Sta ...
- BZOJ 2006: [NOI2010]超级钢琴
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2613 Solved: 1297[Submit][Statu ...
随机推荐
- HTML5网页上播放mp4失败的原因
HTML5先网页直接打开mp4 如果打不开 先用格式工厂转化下格式 转成mp4 avc编码 就行了 ps:ae要先导出mp4 然后再用上面的方法 不要导出avi 不然转化成 avc也是播放不了
- 34,Leetcode 组合总和I,II -C++ 回溯法
I 题目描述 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合.candidates 中的数字可以无 ...
- CycleBarrier与CountDownLatch原理
CountDownLatch 众所周知,它能解决一个任务必须在其他任务完成的情况下才能执行的问题,代码层面来说就是只有计数countDown到0的时候,await处的代码才能继续向下运行,例如: im ...
- python的深浅拷贝-成为马老师的弟子
参考链接 骏马金龙 前提 想要了解深浅拷贝之前必须要知道可变和不可变类型,和他们的特性 不可变类型 数字 字符串 元组 不可变集合 特性:改变值,会创建新的内存空间存储数据 可变类型 列表 字典 可变 ...
- [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ'
在Navicat Premium中执行Mysql的一条删除语句,虽然执行成功了,却提示已下错误: 受影响的行: 时间: .005s of ORDER BY clause is not in GROUP ...
- 关于预装操作系统的ThinkPad的分区建议
Think的个人电脑产品大部分预装有正版操作系统,当前新产品出厂时默认都是一个大分区“C”和一个恢复分区“Q”,很多用户都会要求客服人员提供分区服务,在这里我简单说一下关于分区的几点注意事项望各位参考 ...
- 想让自己的项目6666,可是 Chrome 不答应!
读万卷书,行万里路!有的技能可以从书里学会,有的技能却需要在实战中打怪升级慢慢掌握,今天就来和大家聊一个很多小伙伴经常遇到的问题. 缘起 有人向松哥反映,在搭建微服务分布式配置中心 Spring Cl ...
- 基于 HTML5 WebGL 的 3D 智慧隧道漫游巡检
前言 这次为大家展示的是通过 HT for Web 灵活的图型化编辑工具打造的智慧隧道监控系统.通过 HTML5 技术实现了桌面和移动端的跨平台性,同时现实了可视化运维. 这次主要跟大家分享里面的漫游 ...
- Java 8创建Stream流的5种方法
不知不觉间,Java已经发展到13了,来不及感慨时间过得真的太快了,来不及学习日新月异的技术更新,目前大多数公司还是使用的JDK8版本,一方面是版本的稳定,另一方面是熟悉,所以很多公司都觉得不升级也挺 ...
- EOF的意义及用法
c/c++ 中EOF的意义及用法 EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束. 在微软的DOS和Windows中,读取数据时终端不会产生EOF.此时,应用程序知道数 ...