UVA - 1471 Defense Lines 贪心+二分

该博客介绍了如何解决UVA 1471问题,即在给定序列中删除一段连续子序列以使剩余递增子序列最长。解题策略涉及记录每个值的延伸范围,并利用数组存储长度为i的数的最小值。通过从左到右扫描,使用二分搜索找到合适位置,更新最大递增子序列长度。
摘要由CSDN通过智能技术生成

题目大意:给出长度为n的序列,要求你删除掉一段的连续子序列,使得剩下的序列的递增子序列最长

解题思路:记录以下每个位置的值所能延伸的最左端和最右端,用一个数组记录长度为i的数的最小值,然后从左往右扫描,用二分搜索在数组中找到小于当前值的数的位置,用当前数的right + len - 1就是结果了,再维护一下最大值

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define maxn 200010
int num[maxn], l[maxn], r[maxn], Min[maxn];

int main() {
    int test, n;
    scanf("%d", &test);
    while(test--) {
  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值