博客
关于我
Codeforces B. Nastya and Door (前缀和优化) (Round #637 Div.2)
阅读量:170 次
发布时间:2019-02-28

本文共 1538 字,大约阅读时间需要 5 分钟。

题意: 给出一个n个数的序列表示连续山迫的高度。形式上,您需要选择具有最大峰数(峰指a[i] > a[i - 1] 且 a[i] > a[i + 1] 中的a[i])的山脉子段[l,l + k-1]。在所有这些段中,您需要找到具有最小可能值l的段。

在这里插入图片描述
思路:

  • 先遍历一遍记录所有山峰的位置,再遍历每一个(i,i+k-1)区间中山峰的个数(不算端点!!),从而算出最大峰段。
    *当然这里还需要用一个前缀和优化一下变成O(n)。

代码实现:

#include
#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair
#define lowbit(x) (x &(-x))#define ls(x) x<<1#define rs(x) (x<<1+1)#define me(ar) memset(ar, 0, sizeof ar)#define mem(ar,num) memset(ar, num, sizeof ar)#define rp(i, n) for(int i = 0, i < n; i ++)#define rep(i, a, n) for(int i = a; i <= n; i ++)#define pre(i, n, a) for(int i = n; i >= a; i --)#define IOS ios::sync_with_stdio(0); cin.tie(0);cout.tie(0);const int way[4][2] = { { 1, 0}, { -1, 0}, { 0, 1}, { 0, -1}};using namespace std;const int inf = 0x7fffffff;const double PI = acos(-1.0);const double eps = 1e-6;const ll mod = 1e9 + 7;const int N = 2e5 + 5;//pos用来前缀和统计山峰数int t, n, k, a[N], pos[N];signed main(){ IOS; cin >> t; while(t --){ cin >> n >> k; for(int i = 1; i <= n; i ++){ cin >> a[i]; pos[i] = 0; } for(int i = 2; i < n; i ++){ if(a[i] > a[i-1] && a[i] > a[i+1]) pos[i] = 1; pos[i] += pos[i-1]; //统计峰数的前缀和 } int ans = 0, l = -1; for(int i = 1; i + k - 1 <= n; i ++){ int cnt = pos[i + k - 2] - pos[i] + 1; if(cnt > ans){ //记录当前i开头的k长度区段的峰数,并不断更新ans ans = cnt; l = i; } } cout << ans << " " << l << endl; } return 0;}

转载地址:http://osdj.baihongyu.com/

你可能感兴趣的文章
Mysql学习总结(69)——Mysql EXPLAIN 命令使用总结
查看>>
Mysql学习总结(6)——MySql之ALTER命令用法详细解读
查看>>
Mysql学习总结(70)——MySQL 优化实施方案
查看>>
Mysql学习总结(71)——MySQL 重复记录查询与删除总结
查看>>
Mysql学习总结(71)——数据库介绍(MySQL安装 体系结构、基本管理)再回顾
查看>>
Mysql学习总结(72)——MySQL 开发者开发,设计规范再总结
查看>>
Mysql学习总结(73)——MySQL 查询A表存在B表不存在的数据SQL总结
查看>>
Mysql学习总结(74)——慢SQL!压垮团队的最后一根稻草!
查看>>
Mysql学习总结(75)——并发量大、数据量大的互联网业务数据库设计军规
查看>>
Mysql学习总结(76)——MySQL执行计划(explain)结果含义总结
查看>>
Mysql学习总结(77)——温故Mysql数据库开发核心原则与规范
查看>>
Mysql学习总结(78)——MySQL各版本差异整理
查看>>
Mysql学习总结(79)——MySQL常用函数总结
查看>>
Mysql学习总结(7)——MySql索引原理与使用大全
查看>>
Mysql学习总结(80)——统计数据库的总记录数和库中各个表的数据量
查看>>
Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
查看>>
Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
查看>>
Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结
查看>>
Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
查看>>
Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
查看>>