博客
关于我
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 数据库设计总结
查看>>
Mysql 数据库重置ID排序
查看>>
Mysql 数据类型一日期
查看>>
MySQL 数据类型和属性
查看>>
mysql 敲错命令 想取消怎么办?
查看>>
Mysql 整形列的字节与存储范围
查看>>
mysql 断电数据损坏,无法启动
查看>>
MySQL 日期时间类型的选择
查看>>
Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>
MySQL 是如何加锁的?
查看>>
MySQL 是怎样运行的 - InnoDB数据页结构
查看>>
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>
MySQL 有什么优点?
查看>>
mysql 权限整理记录
查看>>
mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
查看>>
MYSQL 查看最大连接数和修改最大连接数
查看>>
MySQL 查看有哪些表
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>