文章目录

  • 代码解释
  • C++
  • 总结

本题链接:202109-2 非零段划分

本博客给出本题截图

代码解释

应各位博友的需求,写一下本题思路,本题用到了 前缀和 以及 差分 的思维,且这两个算法是近几次考试中的第二题突破口,没有了解的同学一定要先去了解完其原理再看本篇题解。

好,那么我们接下来去分析这道题目,题目的要求其实就是选择一个数,然后让数组中所有小于该数的值变为0,然后统计数组中的非零段数目的最大值,我们怎么去设计这个差分思路:我们的 p 假设从一个特别大的值开始取,一直让p -- 那么当p == a[i](max) 即当p等于数组a中的最大值时,会出现第一个非零段,这里我们把出现的非零段称为一个凸点,那么按照这个思路继续让p --,当我们每出现一个凸点的时候,我们的非零段就会多一个;接下来去思考什么情况会让非零段减少呢?即当两个凸点中间出现一个小的数字,这里举一个例子,设数组a[6 4 6],那么当p == 5的时候,数组a[6 0 6],显然是有两个凸点(均为6),即非零段的个数为2。那么此时我们按照先前思路,执行p --, 那么这个时候p == 4,数组a变为[6 4 6],非零段的个数变为1,即当两个大数之间出现一个小数的话,我们的非零段个数就会变少,我在这里称这个点为凹点。
综上所述,我们得到结论:每当一个凸点出现的时候,非零段的个数就会增加,否则非零段的个数就会减少,我们用数组b去表示这个过程,b[i]即表示当p的值等于i的时候,非零段个数的变化,最后我们的最大值只需要求一次前缀和(求的过程中不断取max)即可。

C++

#include <iostream>
#include <algorithm>using namespace std;const int N = 500010;int a[N], b[N];int main()
{int n;cin >> n;for(int i = 1; i <= n; i ++ ){cin >> a[i];if(a[i] > a[i - 1]){b[a[i - 1]] ++;b[a[i]] --;}}int ans = 0, t = 0;for(int i = 0;i < N;i ++ ){t += b[i];ans = max(ans, t);}cout << ans << endl;return 0;
}

用去重函数unique去除重复的元素版:

#include <iostream>
#include <algorithm>using namespace std;const int N = 10010, M = 500010;int a[M], b[N];int main()
{int n;cin >> n;for (int i = 1; i <= n; i ++ )cin >> a[i];int m = unique(a, a + n + 2) - a;for (int i = 1; i < m; i ++ ) {if (a[i] > a[i - 1] && a[i] > a[i + 1])b[a[i]] ++;if (a[i] < a[i - 1] && a[i] < a[i + 1])b[a[i]] --;}int ans = 0, t = 0;for (int i = N; i; i -- ){t += b[i];ans = max(ans, t);}cout << ans << endl;return 0;
}

总结

标准的一道前缀和 + 差分的题目(这几次考试第二题好像都设计前缀和的思想了
前缀和
差分

202109-2 非零段划分相关推荐

  1. CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版

    CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版 一.题目: 二.Java70分答案 import java.util.ArrayList; import java.uti ...

  2. csp真题 202109-2非零段划分C++代码(100分)

    试题编号: 202109-2 试题名称: 非零段划分 时间限制: 1.0s 内存限制: 512.0MB 样例1输入 11 3 1 2 0 0 2 0 4 5 0 2 样例1输出 5 样例1解释 p=2 ...

  3. CCF202109-2 非零段划分

    主要用到差分法 借用岛屿情况来分析这个题.考虑p足够大的情况,所有的数都被海水淹没了,只有0个岛屿.然后,海平面逐渐下降,岛屿数量出现变化.每当一个凸峰出现,岛屿数就会多一个:每当一个凹谷出现,原本相 ...

  4. CCF202109-2 非零段划分(100分)【序列处理】

    试题编号: 202109-2 试题名称: 非零段划分 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 题目描述 A1,A2,-,An是一个由 n 个自然数(非负整数)组成的数组.我们称其 ...

  5. 非零段划分(CSP202109-2)

    非零段划分 题目链接 题目描述: 输入格式: 输出格式: 样例1: 输入: 11 3 1 2 0 0 2 0 4 5 0 2 输出: 5 样例2: 输入: 14 5 1 20 10 10 10 10 ...

  6. CSP 202109-2 非零段划分

    题目链接:非零段划分 题目描述 A1,A2,⋯,An 是一个由 n 个自然数(非负整数)组成的数组.我们称其中 Ai,⋯,Aj 是一个非零段,当且仅当以下条件同时满足: 1≤i≤j≤n: 对于任意的整 ...

  7. 非零基础自学计算机操作系统 第1章 操作系统概述 习题一

    非零基础自学计算机操作系统 第1章 操作系统概述 习题一 [1]什么是操作系统?操作系统有哪些特性? 答:操作系统是管理计算机硬件与软件资源的计算机程序,它的主要特性有并发性.易用性.稳定性和异步性. ...

  8. 非零基础自学计算机操作系统 第1章 操作系统概述 1.4 操作系统的分类 1.4.1 多道批处理操作系统 1.4.2 分时操作系统

    非零基础自学计算机操作系统 文章目录 非零基础自学计算机操作系统 第1章 操作系统概述 1.4 操作系统的分类 1.4.1 多道批处理操作系统 1.4.2 分时操作系统 第1章 操作系统概述 1.4 ...

  9. Keil MDK下如何设置非零初始化变量(转)

    源:Keil MDK下如何设置非零初始化变量 一些工控产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备.而keil mdk在默 ...

  10. 网络故障解决方案之非标准子网划分【网管员必懂】

    网络故障解决方案之非标准子网划分 一个组织申请了一段IP地址后,可能需要对IP地址进行进一步的子网划分.例如,某规模较大的公司申请了一个B类IP地址166.133.0.0.如果采用标准子网掩码255. ...

最新文章

  1. ToDictionary的用法
  2. 何恺明团队新作!深度学习网络架构新视角:通过相关图表达理解神经网络
  3. 【转载】反向代理为何叫反向代理?
  4. 云时代传统服务器被“唱衰”,服务器厂商面临“大考”
  5. JZOJ 3766. 【BJOI2014】大融合
  6. UVa 10061 How many zero's and how many digits?
  7. lock字段mysql_MySQL的lock tables和unlock tables的用法(转载)
  8. Fastformer:史上最强最快Transformer!清华、MSRA出品!
  9. java的异常处理块的形式_Java 异常处理详细解读
  10. 2021年中国电子陶瓷市场趋势报告、技术动态创新及2027年市场预测
  11. 国防科大登顶SQuAD 2.0排行榜,机器阅读也要“不知为不知”
  12. MSN登陆以后没有响应处理方法
  13. VMware虚拟机网络设置
  14. 53、backtrader的一些基本概念---如何用backtrader画图?
  15. HDU 6045 Is Derek lying? 水题
  16. 自己总结关于浏览器证书安全的二点小技巧
  17. Ocr 图文识别技术——基于百度云OCR技术学习与总结
  18. 将web网站转为App
  19. 【Windows】回收站添加快捷键B
  20. 客运售票员_见过这样的客运售票员吗

热门文章

  1. 公司各个部门所有英文缩写
  2. cocos2d-lua 3x 基础概念(包括场景、导演、在屏幕上显示自定义对象等)
  3. i春秋 - Exploit-Exercises: Nebula - level06
  4. JAVA合并两个PDF文件
  5. win7建行捷德U盾无法使用
  6. 基于人工势场法的车辆编队轨迹规划matlab仿真验证
  7. 各种级数(调和、几何)总结
  8. 论项目管理中当面沟通的重要性
  9. STM32学习记录——MD300二维码扫描模块
  10. GitHub 配置SSH Key