公司动态

牛客周赛157D题(双指针,差分)

📅 2026/8/18 9:18:42
牛客周赛157D题(双指针,差分)
题目链接https://ac.nowcoder.com/acm/contest/139206/D题目大意在给定高度数组h[1..n]中找一个最长的连续子数组[l, r]使得该区间内相邻元素绝对差之和即起伏值不超过k。题目思路根据h数组求出对应的差分数组d后我们使用双指针线性遍历寻找最大合法区间即可代码如下#include bits/stdc.h using namespace std; #define int long long #define endl \n const int N 2e5 10; int d[N]; void solve() { int n, k; cin n k; int h[n 1]; for (int i 1; i n;i){ cin h[i]; } d[1] 0; for (int i 2; i n;i){ d[i] abs(h[i] - h[i - 1]); } int l 1, r 1, sum 0; sum d[1]; int ans r - l 1; while(rn){ r; while(lrsumd[r]k){ sum - d[l1]; l; } sum d[r]; ans max(ans, r - l 1); } coutansendl; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T1; //cin T; while (T--) { solve(); } return 0; }