1007: 严格递增连续子段 [模拟]

时间限制: 1 Sec 内存限制: 128 MB

提交: 244 解决: 18 统计

题目描述

给定一个有NN个正整数组成的序列,你最多可以改变其中一个元素,可以修改为任意的整数。问可以得到的严格递增连续子段的最大长度。

输入

第一行输入一个整数TT,代表有TT组测试数据。

每组数据占两行,第一行输入一个整数NN,代表元素个数。

下面一行有NN个正整数ai(ai<231)ai(ai<231)。

注:1<=T<=100,1<=N<=1000001<=T<=100,1<=N<=100000。

输出

对每组测试数据输出一个整数代表可以得到的严格递增连续子段的最大长度。

样例输入

2
4
1 2 3 4
4
1 2 2 4

样例输出

4
4

提示

第一组数据已经是严格递增连续子段了,不需要修改。

第二组数据可以将第三个元素修改为3,这样可以得到长度为4的严格递增连续子段。

一开始的思路是dp,但是看了学长们的题解后竟然是贪心,看了好久代码才理解

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int a[maxn];
struct wzy{
int start,starti,end,endi,len;
}p[maxn];
int main()
{
int t,n,i;
cin>>t;
while(t--)
{
int k=0,res=1;
int max_len=0;
memset(a,0,sizeof(a));
cin>>n;
cin>>a[1];
p[k].start=a[1];
p[k].starti=1;
for(i=2;i<=n;i++)
{
cin>>a[i];
if(a[i]<=a[i-1])
{
p[k].end=a[i-1];
p[k].endi=i-1;
p[k].len=res;
k++;
p[k].start=a[i];
p[k].starti=i;
max_len=max(max_len,res);
res=1;
}
else res++;
}
p[k].len=res;
p[k].end=a[n];
p[k].endi=n;
k++;
max_len=max(max_len,res);
if(k>1) max_len++;
for(i=0;i<k-1;i++)
if(p[i].end+1<a[p[i+1].starti+1]||p[i].end-1>=1&&a[p[i].endi-1]+1<p[i+1].start)
max_len=max(max_len,p[i].len+p[i+1].len);
cout<<max_len<<endl;
}
return 0;
}

HPU 1007: 严格递增连续子段(贪心)的更多相关文章

  1. TZOJ 4024 游戏人生之梦幻西游(连续子段和绝对值最小)

    塔神酷爱玩梦幻西游这款游戏,这款游戏以著名的章回小说<西游记>故事为背景,透过Q版的人物,营造出浪漫的网络游戏风格.塔神以追求天下无敌为目标,从一个默默无闻的菜鸟,打拼到了登峰造极的大师, ...

  2. HDOJ-1003 Max Sum(最大连续子段 动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=1003 给出一个包含n个数字的序列{a1,a2,..,ai,..,an},-1000<=ai<=100 ...

  3. HDU 1003:Max Sum(DP,连续子段和)

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  4. HDU 1003 最大连续子段和

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)M ...

  5. 【bzoj5089】最大连续子段和 分块+单调栈维护凸包

    题目描述 给出一个长度为 n 的序列,要求支持如下两种操作: A  l  r  x :将 [l,r] 区间内的所有数加上 x : Q  l  r : 询问 [l,r] 区间的最大连续子段和. 其中,一 ...

  6. [题解](线段树最大连续子段和)POJ_3667_Hotel

    题意:1.求一个最靠左的长x的区间全部为0,并修改为1,输出这个区间的左端点 2.修改一个区间为0 实际上是维护最大连续子段和,原来也写过 大概需要维护一个左/右最大子段和,当前这段最大子段长,再维护 ...

  7. JDOJ 2982: 最大连续子段和问题

    洛谷 P1115 最大子段和 洛谷传送门 JDOJ 2982: 最大连续子段和问题 JDOJ传送门 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入格式 第一行是一个正整数NN, ...

  8. maximum-subarray 序列最大连续和 贪心

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  9. 51nod 1275 连续子段的差异

    题目看这里 若[i,j]符合要求,那么[i,j]内的任何连续的子段都是符合要求的.我们可以枚举i,找到能合格的最远的j,然后ans+=(j-i+1). 那么问题就转换成了:在固定i的情况下,如何判断j ...

随机推荐

  1. java使用freemarker生成静态html页面

    1. 模板文件static.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ...

  2. ASP.NET调用dos命令获取交换机流量

    protected void btn_Cisco_Click(object sender, EventArgs e) { try { string ip = txt_ip.Value; string ...

  3. c++中的new和delete

    对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象.对于不能确定需要占用多少内存的情况,动态内 ...

  4. UVA-10726 Coco Monkey(递推)

    题目大意:n个人,m个猴子分桃,第一个人把桃子分成n份余下m个,第一个人将余下的给猴子,拿走自己的那份.第二个人把剩下的桃子也分成n份,余下m个,将余下的分给猴子,拿走自己的那份.………… 直到n个人 ...

  5. dp练习(10)——拦截导弹

    1044 拦截导弹 1999年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descripti ...

  6. jsonp 使用选择器

    使用选择器语法来查找和操作元素 使用类似于css和jquery的语法来查找和操作元素 可以使用Element.select(String selector) 和 Elements.select(Str ...

  7. .net下4款不错的微信SDK

    .net下4款不错的微信SDK: 一款值得推荐的.Net微信开发SDK http://www.17ky.net/soft/474.html.Net微信公开帐号接口 WeiXinSDK http://w ...

  8. Linux内核分析-分析Linux内核创建一个新进程的过程

    作者:江军 ID:fuchen1994 实验题目:分析Linux内核创建一个新进程的过程 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/li ...

  9. 远程访问Centos6.5上的mysql或者mariadb(navicat)

    问题背景 1 环境 物理主机操作系统Centos6.5 虚拟主机KVM:centos6.5 64位min版本(虚拟机安装有台) 网络:桥接模式 2 问题 yum安装mariadb10/mysql6.5 ...

  10. The "Double-Checked Locking is Broken" Declaration

    双重检查锁定在延迟初始化的单例模式中见得比较多(单例模式实现方式很多,这里为说明双重检查锁定问题,只选取这一种方式),先来看一个版本: public class Singleton { private ...