[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 ...
随机推荐
- CW2 Software Maintenance Spec Sheet
CW2 Software Maintenance Spec SheetAcademic Year 2019/2020CW2 is about maintaining and extending a r ...
- 关于wepy小程序图片显示问题
如果图片资源在本地,用background-image 是无法找到本地资源的,只能通过image标签用src进行引入: 图片资源在服务器上,用背景图片和image进行引入,在安卓真机上测试是没有问题的 ...
- 通过JS下载 or 唤起App
判断唤起app的连接是否在WeChat中打开 let isWeiXin = navigator.userAgent.toLowerCase().indexOf('micromessenger') != ...
- R数据挖掘 第二篇:基于距离评估数据的相似性和相异性
聚类分析根据对象之间的相异程度,把对象分成多个簇,簇是数据对象的集合,聚类分析使得同一个簇中的对象相似,而与其他簇中的对象相异.相似性和相异性(dissimilarity)是根据数据对象的属性值评估的 ...
- Blockstack: A Global Naming and Storage System Secured by Blockchains
作者:Muneeb Ali, Jude Nelson, Ryan Shea, and Michael Freedman Blockstack Labs and Princeton University ...
- 使用 Python 获取 Windows 聚焦图片
Windows 聚焦图片会定期更新,拿来做壁纸不错,它的目录是: %localappdata%\Packages\Microsoft.Windows.ContentDeliveryManager_cw ...
- python 进程和线程-进程和线程的比较以及分布式进程
进程和线程的比较 参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017631469467456 我们介绍了多进程和多线程,这是实现多任 ...
- 开发技术-IPython介绍
开发技术-IPython介绍 IPython是交互式的Python命令行,希望大家喜欢. 最近在回顾之前学习的内容,并且继续学习新的知识.这种自身的感觉,很不一般,有太多的感想产生.希望自己可以坚持将 ...
- MYSQL中IN,INSTR,FIND_IN_SET函数效率比较(转)
今天写代码时前台传过来类似‘1,2,3,4,5,6’的字符串,这种情况直接用IN是无效的,需要把字符串分割成数组或者组装成列表,然后再利用mabatis的foreach函数 <select id ...
- c# 读取数据库得到字符串
public string GetProductType(string connectionString, string barCode) { string pro ...