2015合肥网络赛 HDU 5489 Removed Interval LIS+线段树(树状数组)

本文介绍了一种算法,用于求解序列中切掉连续的L长度后形成的序列的最长上升子序列。通过从前到后求LIS(最长上升序列),从后到前求LDS(最长下降序列),并枚举切开位置,利用线段树维护区间最大值来更新答案。

HDU 5489 Removed Interval

题意:

求序列中切掉连续的L长度后的最长上升序列

思路:

从前到后求一遍LIS,从后往前求一遍LDS,然后枚举切开的位置i,用线段树维护区间最大值,在i~n中找到第一个比a[i - L]大的位置k,用LIS[i - L] + LDS[k]更新答案.

代码

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#define eps 1e-8
#define INF 0x3f3f3f3f
#define LL long long
#define MAXN 500005
#define sqr(x) (x) * (x)
using namespace std;
int n, m, s;
int a[MAXN], b[MAXN], c[MAXN];
int f[MAXN], g[MAXN];

int LIS(int n){
    int i, k;
    k = 1;
    c[1] = b[n];
    g[n] = 1;
    for (i = n - 1; i >= 1; i--){
        if (b[i] > c[k]){
            c[++k] = b[i];
            g[i] = k;
        }
        else{
            int pos = lower_bound(c + 1, c + k + 1, b[i]) - c;
            c[pos] = b[i];
            g[i] = pos;
        }
    }
    return k;
}
int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif // OPEN_FILE
    int T;
    scanf("%d", &T);
    int cas = 1;
    int n, L;
    while (T--){
        if (cas == 5){
            cas = 5;
        }
        scanf("%d%d", &n, &L);
        for (int i = 1; i <= n; i++){
            scanf("%d", &a[i]);
            b[i] = -a[i];
        }
        LIS(n);
        int ans = 0;
        int q = 0;
        memset(f, INF, sizeof(f));
        for (int i = L + 1; i <= n; i++){
            int p = lower_bound(f + 1, f + n + 1, a[i]) - f;
            ans = max(ans, p + g[i] - 1);
            p = lower_bound(f + 1, f + n + 1, a[i - L]) - f;
            f[p] = a[i - L];
            q = max(q, p);
        }
        ans = max(ans, q);
        printf("Case #%d: %d\n", cas++, ans);
    }
}
内容概要:本文介绍了一项创新性未发表的研究,即利用多元宇宙优化算法(Multiverse Optimizer, MVO)对分时电价下的需求响应与综合能源系统调度问题进行建模与求解,旨在实现能源系统的经济性、高效性与可持续性运行。该研究构建了包含多种能源设备(如光伏、风机、燃气轮机、储能系统等)及可调节负荷的综合能源系统模型,充分考虑了用户侧的需求响应行为在分时电价机制下的响应特性,通过MVO算法对系统运行成本、能源利用率、碳排放等多目标进行协同优化,实现了日前调度计划的智能决策。研究还提供了完整的MATLAB代码实现,便于研究人员复现实验、验证算法性能,并为进一步研究提供可靠的仿真基础。; 适合人群:具备一定电力系统、优化算法及MATLAB编程基础的科研人员、研究生以及从事能源互联网、综合能源系统规划与运行的技术工程师。; 使用场景及目标:① 学习并掌握多元宇宙优化算法在复杂能源系统调度中的具体应用方法;② 研究分时电价机制如何通过需求响应引导用户参与电网互动,实现削峰填谷;③ 实现综合能源系统(IES)中冷、热、电、气等多种能源的协同优化调度,以降低运行成本、提高新能源消纳能力和系统可靠性;④ 为相关领域的学术研究提供可复现的代码实例和仿真平台。; 阅读建议:此资源以MATLAB代码为核心载体,深入剖析了算法应用与系统建模的全过程。建议读者在学习时,不仅应关注代码的实现细节,更要理解其背后的数学模型、优化目标设定和约束条件的物理意义。建议结合文档中的模型描述,逐步调试代码,观察不同参数和场景下的优化结果,从而深刻掌握综合能源系统优化调度的设计思想与关键技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值