博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P2048 [NOI2010]超级钢琴
阅读量:6543 次
发布时间:2019-06-24

本文共 1314 字,大约阅读时间需要 4 分钟。

思路

和十二省联考D1T2相似的思路

用堆维护最大值,取出一个位置之后把这个位置的下一个值插入堆
注意插入的数有负数,并且开long long

代码

#include 
#include
#include
#include
#define int long longusing namespace std;struct QNode{ int pos,kth,val; bool operator < (const QNode &b) const{ return val
>1; if(pos<=mid) insert(Seg[o].lson,l,mid,pos); else insert(Seg[o].rson,mid+1,r,pos);}int query(int Lroot,int Rroot,int l,int r,int kth){ if(l==r){ if(kth<=Seg[Rroot].sz-Seg[Lroot].sz) return l; else return -0x3f3f3f3f; } int siz=Seg[Seg[Rroot].rson].sz-Seg[Seg[Lroot].rson].sz,mid=(l+r)>>1; if(kth>siz) return query(Seg[Lroot].lson,Seg[Rroot].lson,l,mid,kth-siz); else return query(Seg[Lroot].rson,Seg[Rroot].rson,mid+1,r,kth);}priority_queue
q;signed main(){ scanf("%lld %lld %lld %lld",&n,&k,&Lx,&Rx); for(int i=1;i<=n;i++){ scanf("%lld",&sum[i]); sum[i]+=sum[i-1]; root[i]=root[i-1]; insert(root[i],1,1000000100,sum[i]+500000000); } for(int i=1;i<=n-Lx+1;i++){ int t=query(root[i+Lx-2],root[min(i+Rx-1,n)],1,1000000100,1)-500000000-sum[i-1]; // printf("t=%lld\n",t); q.push((QNode){i,1,t}); } int cnt=0; while(cnt

转载于:https://www.cnblogs.com/dreagonm/p/10903894.html

你可能感兴趣的文章
【deep learning学习笔记】注释yusugomori的DA代码 --- dA.h
查看>>
纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!...
查看>>
java 为啥变量名前要加个m?
查看>>
探索Android中的Parcel机制(上)
查看>>
c++ 类型定义
查看>>
C#开发微信门户及应用(5)--用户分组信息管理
查看>>
怎样实现前端裁剪上传图片功能
查看>>
ffmpeg+SDL2实现的视频播放器「退出、暂停、播放」
查看>>
2011/7/3 第二次评审
查看>>
Openvswitch手册(2): OpenFlow Controller
查看>>
tar解压
查看>>
inheritprototype原型继承封装及综合继承最简实例
查看>>
【磁耦隔离接口转换器】系列产品选型指南
查看>>
Apriori 关联算法学习
查看>>
二叉树、红黑树、伸展树、B树、B+树
查看>>
Junit核心——测试集(TestSuite)
查看>>
MVPArms官方首发一键生成组件化,体验纯傻瓜式组件化开发
查看>>
Log4j_学习_00_资源帖
查看>>
制作iso镜像U盘自动化安装linux系统
查看>>
JSLint的使用
查看>>