超级钢琴 2010年NOI
/*
自己yy的奇葩做法居然A了23333
不过空间好像很大 时间好像略慢.....
毕竟不是正解
前缀维护sum值 枚举区间起点
然后终点的坐标可以确定在一个范围
可持久化线段树查询区间第1大
然后放到堆里 注意每个从堆里取出来再把这个区间第2大的放进去
这里k可能减成负的 注意特判 开始wa了
还有开longlong
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<algorithm>
#define pa pair<int,int>
#define mk make_pair
#define maxn 500010
using namespace std;
int n,m,l,r,k,x,root[maxn],a[maxn],s[maxn],cnt[maxn],tot;
long long ans;
struct node{
int sum,lc,rc;
}t[maxn**];
priority_queue<pa>q;
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
int Build(int S,int L,int R){
++tot;t[tot].sum=S;
t[tot].lc=L;t[tot].rc=R;
return tot;
}
void Insert(int &root,int pre,int l,int r,int pos){
root=Build(t[pre].sum+,t[pre].lc,t[pre].rc);
if(l==r)return;
int mid=l+r>>;
if(pos<=mid)Insert(t[root].lc,t[pre].lc,l,mid,pos);
else Insert(t[root].rc,t[pre].rc,mid+,r,pos);
}
int Query(int L,int R,int l,int r,int k){
if(l==r)return l;
int mid=l+r>>;
int sum=t[t[R].lc].sum-t[t[L].lc].sum;
if(k<=sum)return Query(t[L].lc,t[R].lc,l,mid,k);
else return Query(t[L].rc,t[R].rc,mid+,r,k-sum);
}
int main()
{
freopen("piano.in","r",stdin);
//freopen("piano.out","w",stdout);
n=init();k=init();l=init();r=init();
for(int i=;i<=n;i++){
x=init();
s[i]=s[i-]+x;
a[i]=s[i];
}
int num,pos,L,R,p,len,t;
sort(a+,a++n);
num=unique(a+,a++n)-a-;
for(int i=;i<=n;i++){
pos=lower_bound(a+,a++num,s[i])-a;
Insert(root[i],root[i-],,num,pos);
}
while(!q.empty())q.pop();
for(int i=;i+l-<=n;i++){
L=i+l-,R=min(n,i+r-);
len=R-L+;++cnt[i];t=len-cnt[i]+;
pos=Query(root[L-],root[R],,num,t);
q.push(mk(a[pos]-s[i-],i));
}
for(int i=;i<=k;i++){
p=q.top().second;
ans+=q.top().first;q.pop();
L=p+l-,R=min(n,p+r-);
len=R-L+;++cnt[p];t=len-cnt[p]+;
if(t<=)continue;
pos=Query(root[L-],root[R],,num,t);
q.push(mk(a[pos]-s[p-],p));
}
cout<<ans<<endl;
return ;
}
超级钢琴 2010年NOI的更多相关文章
- [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆)
[BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆) 题面 给出一个长度为n的序列,选k段长度在L到R之间的区间,一个区间的值等于区间内所有元素之的和,使得k个区间的值之和最大.区 ...
- [NOI 2010]超级钢琴
Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙 的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙 ...
- 题解 【NOI2010】超级钢琴
[NOI2010]超级钢琴 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号 ...
- BZOJ 2006: [NOI2010]超级钢琴
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2613 Solved: 1297[Submit][Statu ...
- 【BZOJ-2006】超级钢琴 ST表 + 堆 (一类经典问题)
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2473 Solved: 1211[Submit][Statu ...
- bzoj2006 noi2010 超级钢琴 主席树 + 优先队列
Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2435 Solved: 1195 Description 小 Z是一个小有名气的钢琴家,最近C博士送 ...
- 2006: [NOI2010]超级钢琴 - BZOJ
Description小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为 ...
- 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 ...
随机推荐
- iOS - Blocks
iOS中Blocks的介绍 1. 什么是Blocks Blocks是C语言的扩充功能.就是:带有自动变量的匿名函数. 类似C语言的函数指针.但Blocks不是一个指针,而是一个不带名字的函数, ...
- jquery如何判断div是否隐藏--useful
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- [BZOJ 1833] [ZJOI2010] count 数字计数 【数位DP】
题目链接:BZOJ - 1833 题目分析 数位DP .. 用 f[i][j][k] 表示第 i 位是 j 的 i 位数共有多少个数码 k . 然后差分询问...Get()中注意一下,如果固定了第 i ...
- 使用 getNextException() 来检索已经过批处理的特定元素的异常。 ERRORCODE=-4228, SQLSTATE=null
今天查询了一天发现的问题,用ibatis做批量操作时,报错: [非原子批处理出现故障]使用 getNextException() 来检索已经过批处理的特定元素的异常. ERRORCODE=-4228, ...
- 分页SQL取下一页
20条记录一页,扫描第2页就需要访问40条记录. SQL> select * from ( select * from ( select /*+ index_desc(a idx_page_3) ...
- F - Prime Path
题目大意: 素数路径 估计看数据就明白这道题什么意思了......给两个素数,都是四位数的素数,并且没有前导0,现在需要经过一种变换把一个素数转换成另一个,当然这种转换是有规则的,规则就是每次只能改变 ...
- Servlet的一些细节(2)
1. Servlet的创建时间 Servlet是不能单独运行,调用它的叫做Servlet引擎,或者叫做web服务器 针对客户端的多长Servlet请求,通常情况下,服务器只会创建一个Servlet实例 ...
- HTML的简单介绍
<html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="Co ...
- ganglia Web前端清除当机节点
ganglia默认如果服务器down机也不会在web前段清除该设备,官方文档介绍的办法如下: 1. 登录中央gmeta和gmond机器 2. vi gmond.conf,修改如下,host_dmax默 ...
- Python读写文件模式
1.r 打开只读文件,该文件必须存在. 2.r+ 打开可读写的文件,该文件必须存在. 3.w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失.若文件不存在则建立该文件. 4.w+ 打开可 ...