思路:

将数列合并之后使用线段树。边界条件容易写错。

实现:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN = ;
  4. const int INF = 0x3f3f3f3f;
  5.  
  6. int a[MAXN], tree[MAXN * ], n, m, sum[MAXN];
  7. vector<int> v(, );
  8.  
  9. void build(int num, int l, int r)
  10. {
  11. if (l == r) { tree[num] = v[l]; return; }
  12. int m = l + r >> ;
  13. build(num * , l, m);
  14. build(num * + , m + , r);
  15. tree[num] = max(tree[num * ], tree[num * + ]);
  16. }
  17.  
  18. int query(int num, int l, int r, int x, int y)
  19. {
  20. if (x <= l && y >= r) return tree[num];
  21. int ans = -INF, m = l + r >> ;
  22. if (x <= m) ans = max(ans, query(num * , l, m, x, y));
  23. if (y >= m + ) ans = max(ans, query(num * + , m + , r, x, y));
  24. return ans;
  25. }
  26.  
  27. int main()
  28. {
  29. scanf("%d %d", &n, &m);
  30. for (int i = ; i < n; i++) scanf("%d", &a[i]);
  31. a[n] = INF;
  32. int cnt = ;
  33. for (int i = ; i < n; i++)
  34. {
  35. if (a[i] - a[i - ] != a[i + ] - a[i]) { v.push_back(cnt - ); cnt = ; }
  36. else cnt++;
  37. }
  38. int tot = v.size() - ;
  39. build(, , tot);
  40. for (int i = ; i <= tot; i++) sum[i] = sum[i - ] + v[i];
  41. int l, r;
  42. for (int i = ; i < m; i++)
  43. {
  44. scanf("%d %d", &l, &r);
  45. if (n == ) { puts(""); continue; }
  46. int ls = lower_bound(sum + , sum + tot + , l == n ? l - : l) - sum;
  47. int rs = lower_bound(sum + , sum + tot + , r == n ? r - : r) - sum;
  48. int ans = -;
  49. if (ls == rs) ans = r - l + ;
  50. else
  51. {
  52. ans = max(sum[ls] - l + , r - sum[rs - ]);
  53. if (rs - ls > ) ans = max(ans, query(, , tot, ls + , rs - ) + );
  54. }
  55. printf("%d\n", ans);
  56. }
  57. return ;
  58. }

hihocoder1710 等差子数列的更多相关文章

  1. BUPT复试专题—最长连续等差子数列(2014软院)

    题目描述   给定-个长度为N的整数数列,你需要在其中找到最长的连续子数列的长度, 并满足这个子数列是等差的.注意公差小于或等于0的情况也是允许的. 输入 第一行为数据组数T(1~100),表示测试数 ...

  2. 2017第八届蓝桥杯C/C++ B组省赛-等差素数列

    标题:等差素数列 2,3,5,7,11,13,....是素数序列. 类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列. 上边的数列公差为30,长度为6. 200 ...

  3. c++_等差素数列

    标题:等差素数列 2,3,5,7,11,13,....是素数序列.类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列.上边的数列公差为30,长度为6. 2004年 ...

  4. 【蓝桥杯】2018年第九届蓝桥杯C/C++B组省赛——B题 等差素数列

    题目 标题:等差素数列 2,3,5,7,11,13,....是素数序列. 类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列. 上边的数列公差为30,长度为6. ...

  5. B 等差素数列

    B 等差素数列:2,3,5,7,11,13,....是素数序列.类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列.上边的数列公差为30,长度为6.2004年,格 ...

  6. SCU - 4441 Necklace(树状数组求最长上升子数列)

    Necklace frog has \(n\) gems arranged in a cycle, whose beautifulness are \(a_1, a_2, \dots, a_n\). ...

  7. (寒假集训) Cow Jog(二分优化的最长上升子数列)

    Cow Jog 时间限制: 1 Sec  内存限制: 64 MB提交: 24  解决: 5[提交][状态][讨论版] 题目描述 Farmer John's N cows (1 <= N < ...

  8. java 动态规划解决最大连续子数列和

    很多动态规划算法非常像数学中的递推.我们如果能找到一个合适的递推公式,就能很容易的解决问题.我们用dp[n]表示以第n个数结尾的最大连续子序列的和,这里第n个数必须在子序列中.于是存在以下递推公式: ...

  9. LeetCode - 413. Arithmetic Slices - 含中文题意解释 - O(n) - ( C++ ) - 解题报告

    1.题目大意 A sequence of number is called arithmetic if it consists of at least three elements and if th ...

随机推荐

  1. 1.5.4 HAVING子句

    1.5.4 HAVING子句正在更新内容.请稍后

  2. [数据集]新浪微博数据集MicroblogPCU

    数据集下载地址:下载 摘要:MicroblogPCU是从新浪微博採集到的.它能够被用于研究机器学习方法和社会关系研究. 这个数据集被原作者用于探索微博中的spammers(发送垃圾信息的人).他们的d ...

  3. MVC为Html对象建立一个扩展方法,使用自己的控件就像使用TextBox一样方便

    先看一下我想要的结果: 很容易它就是一个单选按钮组,当我后台为Html对象(HtmlHelper的一个实例,它被定义在System.Web.Mvc名称空间下的WebViewPage类,即它对于所有MV ...

  4. [学习笔记]渗透测试metasploit

    1.渗透成功后,在meterpreter命令行,需要使用如下命令切换当前目录.更多信息,可以参考: meterpreter > pwd C:\ meterpreter > cd /&quo ...

  5. 微信企业号调用js-sdk注意事项

    企业号应用必须添加可信域名,域名必须通过备案,可以是子域名,如果网站带端口,一定也要加上端口号...踩坑记

  6. css3动画应用-音乐唱片旋转播放特效

    css3动画应用-音乐唱片旋转播放特效 核心点: 1.设置图片为圆形居中,使图片一直不停旋转. 2.文字标题(潘玮柏--反转地球)一直从左到右不停循环移动. 3.点击图标,音乐暂停,图片停止旋转:点击 ...

  7. bzoj 2726 任务安排

    题目大意: 机器上有N个需要处理的任务,它们构成了一个序列 把这些任务分成若干批 从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti 在每批任务开始前,机器需要启动时间S,而完成这批 ...

  8. bzoj 3232 圈地游戏 —— 01分数规划+最小割建图(最大权闭合子图)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3232 心烦意乱的时候调这道题真是...越调越气,就这样过了一晚上... 今天再认真看看,找出 ...

  9. uva 11401

    Triangle Counting Input: Standard Input Output: Standard Output You are given n rods of length 1, 2… ...

  10. 不让浏览器缓存input的值

    方法一: 在不想使用缓存的input中添加 autocomplete="off"eg: <input type="text" autocomplete=& ...