【HDU3415】Max Sum of Max-K-sub-sequence,思路+解题报告+AC代码+自虐般疯狂吐槽【0.3%达成!】

#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <iostream>
using namespace std;
const int MAX_SIZE = 100010 * 2;
const int INFINITE = 99999999;
int num[MAX_SIZE];
int sum[MAX_SIZE];
int q[MAX_SIZE];
int ind[MAX_SIZE];
int begin;
int end;
/**
        Problem: HDU3415-Max sum of max-k sequence 【0.3%达成!】
        Thanks to : LPP学长,YL学姐,辛苦了两位= =开化我这种愚人
        Reference:http://www.cppblog.com/wuxu/archive/2010/08/24/124575.aspx
        Knowledge Point:单调队列
        关于单调队列还有一篇好的Reference看,入门级的但是讲的足够详细了。
        http://www.docin.com/p-49960245.html 用单调性优化优先队列。
        Fucking Misunderstanding:
            傻逼错误1:误把sum(i,j)写作了sum(i,j) = sum(i) - sum(j)!实际上这样就把元素j抛出去了,应该是sum(i)-sum(j-1)!
        Thought:
        【大半夜写的,发现bug欢迎fix。。。拿出证据,而不是“我觉得”三个字儿,谢谢】

        好吧,都说过了是单调队列,递增的。
        这里就当做对单调队列的一个大summary好了。
        所谓单调队列,就是其中的内容是单调的,其中元素对应的数组下标也是单调的。
        这里的单调指的不是单调上升就是单调下降。
        单调队列的名字中虽然带了队列两个字,但是跟队列还是有区别的,不过也有共同之处。
        共同之处就是在头(front)的位置取元素,由于单调性可以保证一类问题在单调队列的头处总有最优解,所以是可以这么做的。
        不同之处就是单调队列的头部是可以删除元素的(我习惯用front++来实现),当然,跟队列一样,也可以从尾部添加、删除元素(但是头部不能添加元素哦!)
        那么,这道题的解题思路在哪儿呢?
        就是将给出数组的A[i]求和,Sum[i]表示从[0,i]区间数组A[]元素的和。
        那么,如果求[i,j]区间的和,只要用sum[i]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值