Problem 2136 取糖果

Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

有N个袋子放成一排,每个袋子里有一定数量的糖果,lzs会随机选择连续的几个袋子,然后拿走这些袋子中包含最多糖果的袋子。现问你,在选择x个袋子的情况下,lzs最坏情况下,也就是最少会拿到多少个糖果?对于x取值为1到n都分别输出答案。

 Input

第一行一个整数T,表示有T组数据。

每组数据先输入一行一个整数N(1<=N<=100000),表示袋子数,接下来一行输入N个正整数,输入的第i个数表示第i个袋子所装的糖果数。

 Output

每组数据输出n行,第i行表示lzs随机取连续的i个袋子时的最坏情况下能拿到的糖果数。

 Sample Input

1 5 1 3 2 4 5

 Sample Output

1 3 3 4 5

参考  :  http://www.cnblogs.com/luotinghao/archive/2013/11/11/3418047.html

题意有点绕...大概就是对于一个d,取一段连续的d个数,然后从中选择最大的。现考虑所有长度为d的子段,问这些段数中最大的数中的最小的数是什么。对于d取值为1到n都要输出答案。
首先按从小到大的顺序排序, 依次删除, 删除前查看下,这个点的范围域, 即左右共删除了几个,

设 d = 删除的点数+本身为范围域, 假如d以前没更新过,  则连续取d的最坏值(暂时)为这个点的值
例如样例: 1 3 2 4 5
 
从小到大删除点, 先删除最小点, 以下标记黄色:
       1   3   2   4   5
左右都没删东西, d=1 所以连续取1个最坏值为1, 接下来删除2
   1   3   2   4   5
d=1 因为已经更新过, 更新为2的话肯定比原来的大了, 不是最坏值, 所以不更新, 再删除3
       1   3   2   4   5
d=3 所以连续取3个的最坏值为3, 再删除4
       1   3   2   4   5
d=4 所以连续取4个的最坏值为4, 最后删除5
   1   3   2   4   5
d=5 所以连续取5个的最坏值为5  
 
最后从后往前for一遍, 使连续d+1个的值大于等于连续d个的值
 
中间操作, 可以借助链表的结构
 
 
#include <iostream>
#include <stdio.h>
#include <queue>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
#include <set>
#include <algorithm>
#include <map>
#include <stack>
#include <math.h>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std;
typedef long long LL ;
const int Max_N = ;
int N ;
int ans[Max_N] ;
struct List{
int Left ;
int Right ;
}; struct Node{
int num ;
int id ;
friend bool operator < (const Node A ,const Node B){
return A.num < B.num ;
}
}; List lis[Max_N] ;
Node node[Max_N] ;
bool is_delete[Max_N] ; int find_Left(int id){
if(is_delete[id]==)
return id ;
else
return lis[id].Left = find_Left(lis[id].Left) ;
} int find_Right(int id){
if(is_delete[id]==)
return id ;
else
return lis[id].Right = find_Right(lis[id].Right) ;
} int main(){
int T ;
scanf("%d",&T) ;
while(T--){
scanf("%d",&N) ;
fill(is_delete,is_delete++N,) ;
fill(ans,ans++N ,-) ;
for(int i= ; i <= N ; i++){
scanf("%d",&node[i].num) ;
lis[i].Left = i- ;
lis[i].Right = i+ ;
node[i].id = i ;
}
sort(node+,node++N) ;
for(int i = ;i <= N ; i++){
int id = node[i].id ;
int L = find_Left(lis[id].Left) ;
int R = find_Right(lis[id].Right) ;
int continue_num = R-L- ;
if(ans[continue_num] == -)
ans[continue_num] = node[i].num ;
is_delete[id] = ;
}
for(int i= N- ; i >= ; i--){
if(ans[i] == - || ans[i]>ans[i+])
ans[i] = ans[i+] ;
}
for(int i = ; i <= N ; i++)
printf("%d\n",ans[i]) ;
}
return ;
}

FZU Problem 2136 取糖果的更多相关文章

  1. Problem 2136 取糖果---FUOJ (线段树+维护)

    http://acm.fzu.edu.cn/problem.php?pid=2136 题目大意: 给你n个袋子每个袋子里都装有糖果,然后呢你可以每次抽取一个连续的一个区间的袋子,然后带走里面最多糖果数 ...

  2. fzu 2136 取糖果 好几种方法解决。

    Problem 2136 取糖果 Accept: 39    Submit: 101 Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem ...

  3. FZu Problem 2233 ~APTX4869 (并查集 + sort)

    题目链接: FZu Problem 2233 ~APTX4869 题目描述: 给一个n*n的矩阵,(i, j)表示第 i 种材料 和 第 j 种材料的影响值,这个矩阵代表这n个物品之间的影响值.当把这 ...

  4. FZu Problem 2236 第十四个目标 (线段树 + dp)

    题目链接: FZu  Problem 2236 第十四个目标 题目描述: 给出一个n个数的序列,问这个序列内严格递增序列有多少个?不要求连续 解题思路: 又遇到了用线段树来优化dp的题目,线段树节点里 ...

  5. 翻翻棋(找规律问题)(FZU Problem 2230)

    题目是这样的: FZU Problem 2230 象棋翻翻棋(暗棋)中双方在4*8的格子中交战,有时候最后会只剩下帅和将.根据暗棋的规则,棋子只能上下左右移动,且相同的级别下,主动移动到地方棋子方将吃 ...

  6. FZU Problem 2132 LQX的作业 (数学题)

    http://acm.fzu.edu.cn/problem.php?pid=2132 N个数已经排成非递减顺序,那么每次可以取 前m->n个在x前面.取前m个在x前面的概率是 C(n,m)*x^ ...

  7. fzu Problem 2148 Moon Game(几何 凸四多边形 叉积)

    题目:http://acm.fzu.edu.cn/problem.php?pid=2148 题意:给出n个点,判断可以组成多少个凸四边形. 思路: 因为n很小,所以直接暴力,判断是否为凸四边形的方法是 ...

  8. fzu Problem 2140 Forever 0.5(推理构造)

    题目:http://acm.fzu.edu.cn/problem.php?pid=2140 题意: 题目大意:给出n,要求找出n个点,满足: 1)任意两点间的距离不超过1: 2)每个点与(0,0)点的 ...

  9. Fzu Problem 2082 过路费 LCT,动态树

    题目:http://acm.fzu.edu.cn/problem.php?pid=2082 Problem 2082 过路费 Accept: 528    Submit: 1654Time Limit ...

随机推荐

  1. 安装Android sdk 4.4(19)出现问题的解决方案

    刚更新了Android sdk 19,但是出现以下两个问题,浪费我2个小时的时间,现在将我遇到的问题和解决方法总结如下: 问题1:打开eclipse点更新后,出现This Android SDK re ...

  2. 测试img在不显示时是否加载?

    一直搞不明白,隐藏的元素的背景图,在页面加载时,是否自动加载? img隐藏时,图片会加载吗? 测试代码如下: <!DOCTYPE html> <html> <head&g ...

  3. 在VS 2010中使用 VS2013的解决方案

    本文转载自:http://blog.csdn.net/u011543589/article/details/25563351 今天要用VS2010打开VS2013,一直觉得VS2010到VS2012只 ...

  4. android学习笔记42——图形图像处理2——绘图

    绘图 android的绘图应该继承View组件,并重写onDraw(Canvas canvas)方法即可. 重写onDraw(Canvas canvas)方法时涉及一个绘图API:Canvas,Can ...

  5. 【mongodb系统学习之十二】mongodb修改数据(一)

    十二.mongodb修改数据:update 1).修改数据库数据:update:语法 db.collectionName.update({},{},boolean,boolean): 2).updat ...

  6. 黄聪:C#操作xml SelectNodes,SelectSingleNode通过 xPath 定位class包含Contains的DIV

    一. SelectNodes,SelectSingleNode总是返回NULL 下面以一个简单的xml为例: <?xml version="1.0"?> <mes ...

  7. 一. JVM发展史,运行时数据区域,四大引用

    一.JVM的出现 JVM将字节码解释成不同os下的机器指令,有了jvm,java语言在不同平台上运行时不需要重新编译 虚拟机发展史 (1)Sun Classic classic jvm要么采用纯解释器 ...

  8. PLSQL_性能优化工具系列16_Best Practices: Proactively Avoiding Database

    占位符 PLSQL_性能优化工具系列_Best Practices: Proactively Avoiding Database/Query Performance Issue

  9. mysql 正则

    mysql 正则学习 基本字符匹配 select desk from dealer_info where desk regexp "82107777"; . 表示匹配任意一个字符 ...

  10. centos利用cloudflare的bpf-tools实现ddos防护

    概念 利用BPF( Berkeley Packet Filter)工具集结合iptables的xt_bpf模块可以实现高性能包过滤,从而应对大规模的ddos攻击.BPF Tools包含一组简单的pyt ...