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]超级钢琴的更多相关文章

  1. BZOJ 2006: [NOI2010]超级钢琴

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2613  Solved: 1297[Submit][Statu ...

  2. Bzoj 2006: [NOI2010]超级钢琴 堆,ST表

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2222  Solved: 1082[Submit][Statu ...

  3. NOI2010超级钢琴 2

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 1296  Solved: 606[Submit][Status ...

  4. BZOJ 2006: [NOI2010]超级钢琴( RMQ + 堆 )

    取最大的K个, 用堆和RMQ来加速... ----------------------------------------------------------------- #include<c ...

  5. BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表

    BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐 ...

  6. bzoj2006 [NOI2010]超级钢琴 (及其拓展)

    bzoj2006 [NOI2010]超级钢琴 给定一个序列,求长度在 \([L,\ R]\) 之间的区间和的前 \(k\) 大之和 \(n\leq5\times10^5,\ k\leq2\times1 ...

  7. P2048 [NOI2010]超级钢琴(RMQ+堆+贪心)

    P2048 [NOI2010]超级钢琴 区间和--->前缀和做差 多次查询区间和最大--->前缀和RMQ 每次取出最大的区间和--->堆 于是我们设个3元组$(o,l,r)$,表示左 ...

  8. 洛谷 P2048 [NOI2010]超级钢琴 解题报告

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

  9. bzoj千题计划162:bzoj2006: [NOI2010]超级钢琴

    http://www.lydsy.com/JudgeOnline/problem.php?id=2006 输出最大的k个 sum[r]-sum[l-1] (L<=r-l+1<=R) 之和 ...

随机推荐

  1. jQuery插件实例三:图片滚动[切换]效果一

    图片切换效果在很多网站上都能看到,是一种常见的广告/活动宣传方式,通常位于网页上端.这个插件是众多图片切换效果的形式中的一种,数据源可在前端配置,也可从后台通JSON格式传输数据,当然,数据格式是固定 ...

  2. tomcat7换端口号调试

    1.C:\tomcat\conf\server.xml中修改端口号 2.C:\tomcat\bin\startup.bat批处理文件启动tomcat 3.用ctrl+c结束批处理文件 4.调试结束

  3. 函数的应用 "注册" and "登录"

    登录 自己写 # 注册 registdef regist(): f = open("account", mode="r+", encoding="ut ...

  4. 列表 ->join---> 字符串 转类型:x--->y类型 y(x)

    列表     ->join--->           字符串 转类型:x--->y类型        y(x)

  5. DevExpress01:Bar Manager,bar 、Toolbars

    Bar Manager : 不可见的控件 如果想在窗体或用户控件添加工具条或弹出菜单,我们需要把一个不可见的控件 BarManager拖放到这个窗体或用户控件上. 这个BarManager控件维护工具 ...

  6. C++ 课堂作业1.0

    c++第一次课堂作业点这里 题目要求:输入半径,计算圆的面积,在调用外部函数,无需使用类.

  7. QT里使用Gsoap调用WebService

    错误了很多天,今天终于搞定,并得到了服务器的结果.这里把错误的原因记录下来. 首先是这里,之前一直没有加载进来,所以一直报错 SOURCES += main.cpp\ gsoap/soapClient ...

  8. SGU---105 水题

    题目链接: https://cn.vjudge.net/problem/SGU-105 题目大意: 定义一个数列 1,12,123,1234,12345......12345678910,123456 ...

  9. PHP中include和require

    1.include语句 使用include语句可以告诉PHP提取特定的文件,并载入它的全部内容 1 <?php 2 inlude "fileinfo.php"; 3 4 // ...

  10. php基础学习-sdy

    1.php语言结构和函数 exit()和die() exit()相当于把下面的代码都注释了 die()终止脚本 两个差不多 函数有很多种 (1)语言结构 (2)自定义函数 (3)内置函数 functi ...