[NOI2010]超级钢琴

链接

luogu

思路

和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;
}

转载于:https://www.cnblogs.com/dsrdsr/p/11405964.html

[NOI2010]超级钢琴 主席树相关推荐

  1. BZOJ2006 [NOI2010]超级钢琴 【堆 + RMQ】

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MB Submit: 3446  Solved: 1692 [Submit][Sta ...

  2. bzoj 2006 [NOI2010]超级钢琴 rmq+堆

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 3708  Solved: 1846 [Submit][Sta ...

  3. NOI2010超级钢琴

    **NOI2010 超级钢琴** **Description** 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出 ...

  4. P2048 [NOI2010] 超级钢琴(ST表 + 优先队列优化)

    P2048 [NOI2010] 超级钢琴 题目 小 Z 是一个小有名气的钢琴家,最近 C 博士送给了小 Z 一架超级钢琴,小 Z 希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出 ...

  5. 贪心(数据结构):COGS 468. [NOI2010]超级钢琴

    ★★★☆   输入文件:piano.in   输出文件:piano.out   简单对比 时间限制:2 s   内存限制:512 MB 超级钢琴 [问题描述] 小Z是一个小有名气的钢琴家,最近C博士送 ...

  6. P2048 [NOI2010]超级钢琴

    传送门 考虑维护前缀和 $sum[i]$ 那么对于每一个位置 $i$ ,左端点为 $i$ 右端点在 $[i+L-1,i+R-1]$ 区间的区间最大值容易维护 维护三元组 $(o,l,r)$ ,表示左端 ...

  7. 洛谷 P2048 [NOI2010]超级钢琴(优先队列,RMQ)

    传送门 我们定义$(p,l,r)=max\{sum[t]-sum[p-1],p+l-1\leq t\leq p+r-1 \}$ 那么因为对每一个$p$来说$sum[p-1]$是一个定值,所以我们只要在 ...

  8. P2048 [NOI2010] 超级钢琴(RMQ 贪心)

    文章目录 题目描述 解析 代码 传送门 题目描述 解析 首先,如果只有一个和弦,那么问题显然简单了 用前缀和结合ST表随便做做即可 然而 这次要求前k大的 怎么办呢? 参照之前有一道序列合并的做法 我 ...

  9. [NOI2010] 超级钢琴

    题目类型:RMQ+堆 传送门:>Here< 题意:给出一个长度为\(N\)的序列\(a\),对于每一个\(i\)作为和弦的起点,长度可以是\(L \rightarrow R\).问所有和弦 ...

最新文章

  1. reid笔记 yolov5 deepsort
  2. (传送门)Ubuntu 常用软件安装
  3. STM32下SysTick的一个容易发生的错误,时钟频率设置
  4. 队列化栈栈化队列(力扣)
  5. python 中将大列表拆分成小列表
  6. s3c44b0x开发板之BOOT ROM配置
  7. leetcode 141. Linked List Cycle
  8. 从头开始敲代码之《从BaseApplication/Activity开始》
  9. java 获取内存地址_Java 的多态在 JVM 里原来是这样的
  10. Tripwire安装
  11. 操作文件和目录【TLCL】
  12. Python 爬虫 —— scrapy
  13. ADO.NET - Optimistic Pessimistic Concurrency
  14. scrapy爬虫—获取script中的data数据
  15. linux系统移植篇(一)—— linux系统组成
  16. Android 利用Canvas实现双指拖动和双指缩放图片
  17. 新生入学了,针对腾讯的产品全民K歌(或QQ空间、腾讯游戏......)做一次推广活动,包括产品功能设计和运营活动推广方案。
  18. 获取谷歌浏览器Chrome缓存目录
  19. phpcms富文本框上传图片去除水印
  20. 用 word2vec 进行文档聚类

热门文章

  1. 【洛谷 1879】玉米田
  2. 接受与返回json数据
  3. MongoDB和Java(5):Spring Data整合MongoDB(注解配置)
  4. 【转】Mac本地生成SSH Key 的方法
  5. 2017.0613.《计算机组成原理》总线控制-通信控制
  6. 芬兰高性能图表控件-免费试用并提供技术支持
  7. Discuz UCenter 修改手记 - 2014.12.19
  8. 云计算之路-阿里云上:基于Xen的IO模型进一步分析“黑色0.1秒”问题
  9. 物理数据模型(PDM)-概念数据模型 (CDM)-面向对象模型 (OOM):适用于已经设计好数据库表结构了。...
  10. tesorflow 填充‘same’与‘valid’