[ 10.08 ]CF每日一题系列—— 602B

Description:
  一个数组,保证相邻两个元素值得差小于1,问题,最大值和最小值的差 < 1的区间长度最长是多少

Solution:
  还是卡了一下,本来以为是模拟就好了,但是卡时间,想来想去最后还是忽略了一个地方,就是它的保证,相邻元素值得差小于1,就保证了这个序列得变化是以1或0为单位相邻变化的,所以不可能出现5 4 6,所以我们考虑一个数字x的时候只要去找出现的位置就好,我们要找的可能区间有x 和 x + 1区间或者x 和 x - 1区间,所以我们看一下上一个x - 1 出现的位置和x + 1 出现的位置在哪,因为他俩不能共存,如果x - 1出现的位置靠后,我们要计算的就是 x和x-1区间的长度,要看 (x - 2)出现的位置和x + 1出现位置的最大值,为其限制,反之亦然,用一个dp数组维护就好了

#include <iostream>
#include <cstdio>
#include <cstring>
#define inf ( 1 << 28 )
using namespace std;
const int maxn = 1e5 + 1e3;
int x;
int dp[maxn];
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        memset(dp,0,sizeof(dp));
        int ans = 0;
        for(int i = 1;i <= n;i++)
        {
            scanf("%d",&x);
            if(dp[x - 1] > dp[x + 1])ans = max(ans,i - max(dp[x + 1],dp[x - 2]));
            else ans = max(ans,i - max(dp[x+2],dp[x-1]));
            dp[x] = i;
        }
        printf("%d\n",ans);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/DF-yimeng/p/9756162.html

时间: 2024-07-30 06:09:20

[ 10.08 ]CF每日一题系列—— 602B的相关文章

[ 10.03 ]CF每日一题系列—— 534B贪心

Descripe: 贪心,贪在哪里呢-- 给你初始速度,结尾速度,行驶秒数,每秒速度可变化的范围,问你行驶秒数内最远可以行驶多少距离 Solution: 贪心,我是否加速,就是看剩下的时间能不能减到原始给定的结尾速度 #include <iostream> using namespace std; int main() { int v1,v2; int t,d; while(cin>>v1>>v2) { cin>>t>>d; int ret =

[ 10.4 ]CF每日一题系列—— 486C

Description: 给你一个指针,可以左右移动,指向的小写字母可以,改变,但都是有花费的a - b 和 a - z花费1,指针移动也要花费,一个单位花费1,问你把当前字符串变成回文串的最小化费是多少 Solution: 真是贪啊,也怪我没咋理解题意~~ 首先对于字母的调整肯定是有一个最优值得,无法改变的,能改变的就是我们是改变左区间的还是右边的呢? 我们可以记录改变字母的最大区间长度(一半的区间),我们从0遍历到中间,得到左区间的范围,如过p在左区间就用这个范围,否则用右区间的范围,所以不

[ 9.22 ]CF每日一题系列—— 484A Bits

Description: 给你一个l,r的区间让你找一个最小的x并且其二进制数要包含最多的1位,输出它的十进制 Solution: 我本来就是贪心,但是贪大了,想1一直往上添加1,但是忘记了0在中间的情况,考虑好了之后,发现这样贪是错误的,因为越往后位数越大,所以你最后的结果只能是1,11,111,1111,11111,而不可能是10,100,1001,10010,所以应该从后往前贪,这也是我们十进制转二进制的人工算法吧算是,十进制转二进制,手算的时候,就是一步一步确定最高位的1在哪里, cod

CF每日一题系列 —— 415A

http://codeforces.com/problemset/page/7?order=BY_SOLVED_DESC 从5000以内选的,emmm还是比较水的哈 时间还是有的,所以万事万物贵在坚持,希望能坚持下去! Describe: 1 - n个灯线性排列(初始为开),小明可以选择开关 op,这回把op - n 的灯全部关闭,如果(是关着的状态没有影响) 给你小明选择op的操作顺序,输出顺序输出每个灯是由哪个op操作关了的 Solution: 跑暴力就好了,我用了一个比较水的优化,记录当前

[ 9.11 ]CF每日一题系列—— 441C暴力模拟

Description: n * m 的地图,建设k个管道管道只能横竖走,且长度大于等于2,问你任意一种建设方法 Solution: 图里没有障碍,所以先把前k - 1个管道每个分2个长度,最后一个管道一连到底 Code: PS:今天时间没来的急,其实函数可以封装一下的,虽然都是暴力,但也得暴力的优美不是?? #include <iostream> #include <cstdio> using namespace std; int main() { int n,m,k; whil

[ 9.12 ]CF每日一题系列—— 960B暴力数组

Description: 给你两个数组,顺序一定,问你第一个数组连续的几个值等于下一个数组连续的几个值,然后寻找这个值得最大值,也就是满足就换 Solution: 用两个变量索引,判断即可 #include <iostream> #include <cstdio> using namespace std; const int maxn = 1e6 + 1e3; int a[maxn],b[maxn]; int main() { int n,m; while(~scanf("

[ 9.26 ]CF每日一题系列—— 771B递推问题

Description: 给定你命名的规律,1-10个字符,开头必须大写,最多有50个名字,然后告诉你有n个人,判断区间长度为k,那么你将得到n - k + 1个答案(YES or NO) 表示1 - k,2 -k+1,n - K + 1-- n这些人里面是否没有重名,YES没有,NO有,让你推出一种名字的组合方式 Solution: 首先先跑出一个名字数组,这个题目要往后看,所以应该是从后往前推n - k + 2 到 n的名字没有要求,所以我们命名各不相同,从n - k + 1开始,如果是YE

10.15PMP试题每日一题

关于项目.项目集.项目组合,说法正确的是:A.项目集和项目管理的重点在于开展"正确"的项目集和项目B.项目集不是大项目,规模特别大的项目称之为"大型项目"C.项目组合管理注重以"正确"的方式开展项目集和项目D.一个项目至少属于一个项目集,但不一定属于一个项目组合 答案将于明天和新题一起揭晓! 10.12试题答案:D 原文地址:http://blog.51cto.com/13554215/2300214

10.23PMP试题每日一题

实施整体变更控制过程的输入是:A.工作绩效报告.变更请求.事业环境因素B.工作绩效信息.项目管理计划.项目文件C.工作绩效报告.组织过程资产.协议D.工作绩效数据.批准的变更请求.事业环境因素 答案将于明天和新题一起揭晓! 10.22试题答案:C 原文地址:http://blog.51cto.com/13554215/2308077