HPU 1007: 严格递增连续子段(贪心)
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: 严格递增连续子段(贪心)的更多相关文章
- TZOJ 4024 游戏人生之梦幻西游(连续子段和绝对值最小)
塔神酷爱玩梦幻西游这款游戏,这款游戏以著名的章回小说<西游记>故事为背景,透过Q版的人物,营造出浪漫的网络游戏风格.塔神以追求天下无敌为目标,从一个默默无闻的菜鸟,打拼到了登峰造极的大师, ...
- HDOJ-1003 Max Sum(最大连续子段 动态规划)
http://acm.hdu.edu.cn/showproblem.php?pid=1003 给出一个包含n个数字的序列{a1,a2,..,ai,..,an},-1000<=ai<=100 ...
- HDU 1003:Max Sum(DP,连续子段和)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- HDU 1003 最大连续子段和
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)M ...
- 【bzoj5089】最大连续子段和 分块+单调栈维护凸包
题目描述 给出一个长度为 n 的序列,要求支持如下两种操作: A l r x :将 [l,r] 区间内的所有数加上 x : Q l r : 询问 [l,r] 区间的最大连续子段和. 其中,一 ...
- [题解](线段树最大连续子段和)POJ_3667_Hotel
题意:1.求一个最靠左的长x的区间全部为0,并修改为1,输出这个区间的左端点 2.修改一个区间为0 实际上是维护最大连续子段和,原来也写过 大概需要维护一个左/右最大子段和,当前这段最大子段长,再维护 ...
- JDOJ 2982: 最大连续子段和问题
洛谷 P1115 最大子段和 洛谷传送门 JDOJ 2982: 最大连续子段和问题 JDOJ传送门 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入格式 第一行是一个正整数NN, ...
- maximum-subarray 序列最大连续和 贪心
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- 51nod 1275 连续子段的差异
题目看这里 若[i,j]符合要求,那么[i,j]内的任何连续的子段都是符合要求的.我们可以枚举i,找到能合格的最远的j,然后ans+=(j-i+1). 那么问题就转换成了:在固定i的情况下,如何判断j ...
随机推荐
- 《剑指offer》第三十七题(序列化二叉树)
// 面试题37:序列化二叉树 // 题目:请实现两个函数,分别用来序列化和反序列化二叉树. #include "BinaryTree.h" #include <iostre ...
- Idea设置默认不折叠一行的函数
- 关于怎么解决java.lang.NoClassDefFoundError错误
五一在部署新的统一登录时,遇到这样一个问题: 很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实 ...
- TimeZone 时区 (JS .NET JSON MYSQL) + work week 闰年
来源参考 : http://www.cnblogs.com/qiuyi21/archive/2008/03/04/1089456.html 来源参考 : http://walkingice.blogs ...
- bzoj2286: [Sdoi2011]消耗战 虚树
在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战斗,我军胜利在望.已知在其他k个 ...
- 现在转战c++的领域,纯幼儿园
C++中: 如果你用#include<iostream.h>就不需写这句话(旧标准).但是如果你用#include<iostream>就必须要写.但是在VS2010中就出现错误 ...
- 悟空CRM框架下载模板
1.你可以把你要下载的模板放在这个项目的Public/excelmodel目录下,然后你就可以在页面中编写代码 你可以在下载按钮这里编写:onclick="window.location.h ...
- Leetcode 79
//这是我写过最难的递归了...//class Solution { public: bool exist(vector<vector<char>>& board, s ...
- quartz---springmvc的配置文件正合
quartz---springmvc的配置文件正合 XML <beans xmlns="http://www.springframework.org/schema/beans" ...
- 0SGU 128 snake (&& ZOJ 3521) 尺取,排序二叉树,线段树 难度:2
128. Snake time limit per test: 0.25 sec. memory limit per test: 4096 KB There are N points given by ...