2016 一中培训 day 5 ksum
又是一天的爆零!!!!!
原本第一题 很容易做 竟然优化过度
丢了答案
1693: ksum
- Time Limit
- 1000 ms
- Memory Limit
- 524288 KBytes
- Judge
- Standard Judge
- Solved
- 18
- Submit
- 41
Description
Peter喜欢玩数组。NOIP这天,他从Jason手里得到了大小为n的一个正整数 数组。
Peter求出了这个数组的所有子段和,并将这n(n+1)/2个数降序排序,他想 知道前k个数是什么。
Input Format
输入文件名为 ksum.in。
输入数据的第一行包含两个整数 n 和 k。
接下来一行包含 n 个正整数,代表数组。
Output Format
输出文件名为 ksum.out。
输出 k 个数,代表降序之后的前 k 个数,用空格隔开。
Sample Input
input1
3 4
1 3 4 input2
3 3
10 2 7
Sample Output
output1
8 7 4 4 output2
19 12 10
Hint
测试点编号 n ≤ k ≤
1 100 5000
2 500 100000
3 1000 80000
4 1000 100000
5 10000 50000
6 20000 80000
7 50000 80000
8 100000 80000
9 100000 100000
10 100000 100000
对于所有数据,满足 ai≤10 9 k≤n(n+1)/2,n≤100000,k≤100000
明显的堆维护 对于一段连续序列 它的一系列次小值 一定是这段序列的子集;
只要每次取出 堆顶 将堆顶序列分别由 (l+1,r)&&(l,r-1)的子序列塞入堆中
进行堆维护即可 注意过程可能出现重复顶点 用哈希表维护即可;
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
#include<vector>
#define maxn 100010
using namespace std;
struct st
{
int l,r;
long long sum;
}mu[*maxn];
typedef pair<int,int> pa;
map <pa,bool>q1;
int n,m,k,l,n1,i;
int a[maxn];
void down(int x)
{
int fa=x,son;
while(fa*<=n1)
{
son=fa*;
if(mu[son+].sum>mu[son].sum&&son+<=n1)son++;
if(mu[fa].sum>mu[son].sum)break;
swap(mu[fa],mu[son]);
fa=son;
}
}
void up(int x)
{
int fa,son=x;
while(son/)
{
fa=son/;
if(mu[fa].sum>mu[son].sum)break;
swap(mu[fa],mu[son]);
son=fa;
}
}
void push (st x)
{
n1++; q1[pa(x.l,x.r)]=;
mu[n1]=x;
up(n1);
}
int main()
{
// freopen("ksum.in","r",stdin);
// freopen("ksum.out","w",stdout);
scanf("%d%d",&n,&k);
for(i=;i<=n;++i)
{
scanf("%d",&a[i]);
mu[].sum+=a[i];
}
n1=;mu[].l=;mu[].r=n;q1[pa(mu[].l,mu[].r)]=;
for(i=;i<=k;++i)
{
printf("%lld ",mu[].sum);
if(mu[].l<mu[].r)
{
st q;
q=mu[];
q.sum-=a[q.l];
q.l++;
if(!q1[pa(q.l,q.r)])
push(q);
q=mu[];
q.sum-=a[q.r];
q.r--;
if(!q1[pa(q.l,q.r)])
push(q);
}
mu[]=mu[n1--];
down();
}
}
2016 一中培训 day 5 ksum的更多相关文章
- vijos1056题解
题目: 桌面上放了N个平行于坐标轴的矩形,这N个矩形可能有互相覆盖的部分,求它们组成的图形的面积. 在翻题目时,偶然发现了这道标号为WA的题目. 原来,以前我把一中培训的代码发了上去,却WA了4个点, ...
- 腾讯网2016回响中国:华清远见荣获2016年度知名IT培训品牌
12月1日,由腾讯网主办的“2016回响中国·腾讯网教育年度盛典”上,揭晓了“2016腾讯网教育年度总评榜”榜单.高端IT就业培训专家——华清远见教育集团凭借自身优质的高薪IT就业服务优势成功入围,荣 ...
- 【兄弟连】2016高洛峰新版PHP培训视频教程
[兄弟连]2016高洛峰新版PHP培训视频教程 视频部分目录: 下载地址:http ...
- TFS Training for Kunlun bank (http://www.klb.cn/) 微软研发流程(ALM)管理培训会议(昆仑银行) 2016.09.21
银行一直是微软技术的伤心地,由于历史原因,微软技术和产品一直很难进入到银行业务的核心区域,但是微软今年来的进步不少,在开发工具和平台方面已经连续攻克了几个典型的金融企业,例如农业银行,中国人保等. 应 ...
- TFS实战培训 - 博时基金公司 (2016年8月)
博时基金管理有限公司是中国内地首批成立的五家基金管理公司之一, 是目前我国资产管理规模最大的基金公司. 博时信息技术部的的软件研发团队是负责公司信息化的核心技术部门,为提升软件产品的研发效率和质量,计 ...
- [2016湖南长沙培训Day4][前鬼后鬼的守护 chen] (动态开点线段树+中位数 or 动规 or 贪心+堆优化)
题目大意 给定一个长度为n的正整数序列,令修改一个数的代价为修改前后两个数的绝对值之差,求用最小代价将序列转换为不减序列. 其中,n满足小于500000,序列中的正整数小于10^9 题解(引自mzx神 ...
- [网络安全] [视频分享]KaLi Linux基础培训2016 最新的哦【福吧资源网】
最新的教程同时针对kali linux2016最新版本的多个问题解决办法还有一些实例利用. 下载地址:http://www.fu83.cn/thread-310-1-1.html
- 2016.11.14测试 长乐一中2014NOIP复赛模拟题 第一题。
1.正确答案 [题目描述] 小H与小Y刚刚参加完UOIP外卡组的初赛,就迫不及待的跑出考场对答案. "吔,我的答案和你都不一样!",小Y说道,"我们去找神犇们问答案吧&q ...
- 2016.8.16 Java培训第一天
1. 十进制转换二进制 31/2=15余1 15/2=7余1 7/2=3余1 3/2=1余1 31的二进制结果为11111 35/2=17余1 17/2=8余1 8/2=4余0 4/2=2 ...
随机推荐
- tensorflow 运行成功!
折腾了一天安装tensorflow环境,终于可以运行,也记录一下安装中容易犯的错误总结(写给python小白们) 一.win7 双系统 安装ubuntu 16.04 ,参考 http://jingya ...
- android 开发 - 使用okhttp框架封装的开发框架
概述 在android开发中经常要访问网络,目前最流行的网络访问框架就是Okhttp了,然而我们在具体使用时,往往仍然需要二次封装.我使用Builder设计模式进行了封装形成oknet开源库. 介绍 ...
- MacBook 蓝牙无法搜索设备
背景 经常把MacBook合上盖子就塞进包里,用时打开盖子就继续操作,偶尔会出现刚刚还在用的罗技蓝牙鼠标,重新打开笔记本后就连接不上了,而且也无法搜索到周边的蓝牙设备. 解决方案 快捷键:Option ...
- tengine-2.1.0 + GraphicsMagick-1.3.20
export LUAJIT_LIB=/usr/local/libexport LUAJIT_INC=/usr/local/include/luajit-2.0/./configure --prefix ...
- Cobbler批量安装Ubuntu/CentOS系统
2013-07-25 一.安装和修改cobbler配置 1. Cobbler不在CentOS的基本源中,需要导入EPEL源升级软件包, 确保epel-release包的版本为最新,当前最新版本为 ...
- MyBatis知多少(25)动态SQL
使用动态查询是MyBatis一个非常强大的功能.有时你已经改变WHERE子句条件的基础上你的参数对象的状态.在这种情况下的MyBatis提供了一组可以映射语句中使用,以提高SQL语句的重用性和灵活性的 ...
- CSS 布局属性(display,float,clear,visibility,overflow,overflow-x,overflow-y)
display:none | inline | block | list-item | inline-block | table | inline-table | table-caption | ta ...
- iOS开发工具——网络封包分析工具Charles
简介 Charles是在Mac下常用的截取网络封包的工具,在做iOS开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析.Charles通过将自己设置成系统的网络访问代理服务器,使 ...
- ruby -- 基础学习(七)时间的内置函数和格式说明
Rails -- 时间的内置函数和格式说明 FROM:http://www.douban.com/note/99064603/ time = Time.now #获得当前时间 time.gmt ...
- 二叉查找树(一)之 图文解析 和 C语言的实现
概要 本章先对二叉树的相关理论知识进行介绍,然后给出C语言的详细实现.关于二叉树的学习,需要说明的是:它并不难,不仅不难,而且它非常简单.初次接触树的时候,我也觉得它似乎很难:而之所产生这种感觉主要是 ...