hihocoder1710 等差子数列
思路:
将数列合并之后使用线段树。边界条件容易写错。
实现:
- #include <bits/stdc++.h>
- using namespace std;
- const int MAXN = ;
- const int INF = 0x3f3f3f3f;
- int a[MAXN], tree[MAXN * ], n, m, sum[MAXN];
- vector<int> v(, );
- void build(int num, int l, int r)
- {
- if (l == r) { tree[num] = v[l]; return; }
- int m = l + r >> ;
- build(num * , l, m);
- build(num * + , m + , r);
- tree[num] = max(tree[num * ], tree[num * + ]);
- }
- int query(int num, int l, int r, int x, int y)
- {
- if (x <= l && y >= r) return tree[num];
- int ans = -INF, m = l + r >> ;
- if (x <= m) ans = max(ans, query(num * , l, m, x, y));
- if (y >= m + ) ans = max(ans, query(num * + , m + , r, x, y));
- return ans;
- }
- int main()
- {
- scanf("%d %d", &n, &m);
- for (int i = ; i < n; i++) scanf("%d", &a[i]);
- a[n] = INF;
- int cnt = ;
- for (int i = ; i < n; i++)
- {
- if (a[i] - a[i - ] != a[i + ] - a[i]) { v.push_back(cnt - ); cnt = ; }
- else cnt++;
- }
- int tot = v.size() - ;
- build(, , tot);
- for (int i = ; i <= tot; i++) sum[i] = sum[i - ] + v[i];
- int l, r;
- for (int i = ; i < m; i++)
- {
- scanf("%d %d", &l, &r);
- if (n == ) { puts(""); continue; }
- int ls = lower_bound(sum + , sum + tot + , l == n ? l - : l) - sum;
- int rs = lower_bound(sum + , sum + tot + , r == n ? r - : r) - sum;
- int ans = -;
- if (ls == rs) ans = r - l + ;
- else
- {
- ans = max(sum[ls] - l + , r - sum[rs - ]);
- if (rs - ls > ) ans = max(ans, query(, , tot, ls + , rs - ) + );
- }
- printf("%d\n", ans);
- }
- return ;
- }
hihocoder1710 等差子数列的更多相关文章
- BUPT复试专题—最长连续等差子数列(2014软院)
题目描述 给定-个长度为N的整数数列,你需要在其中找到最长的连续子数列的长度, 并满足这个子数列是等差的.注意公差小于或等于0的情况也是允许的. 输入 第一行为数据组数T(1~100),表示测试数 ...
- 2017第八届蓝桥杯C/C++ B组省赛-等差素数列
标题:等差素数列 2,3,5,7,11,13,....是素数序列. 类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列. 上边的数列公差为30,长度为6. 200 ...
- c++_等差素数列
标题:等差素数列 2,3,5,7,11,13,....是素数序列.类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列.上边的数列公差为30,长度为6. 2004年 ...
- 【蓝桥杯】2018年第九届蓝桥杯C/C++B组省赛——B题 等差素数列
题目 标题:等差素数列 2,3,5,7,11,13,....是素数序列. 类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列. 上边的数列公差为30,长度为6. ...
- B 等差素数列
B 等差素数列:2,3,5,7,11,13,....是素数序列.类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列.上边的数列公差为30,长度为6.2004年,格 ...
- SCU - 4441 Necklace(树状数组求最长上升子数列)
Necklace frog has \(n\) gems arranged in a cycle, whose beautifulness are \(a_1, a_2, \dots, a_n\). ...
- (寒假集训) Cow Jog(二分优化的最长上升子数列)
Cow Jog 时间限制: 1 Sec 内存限制: 64 MB提交: 24 解决: 5[提交][状态][讨论版] 题目描述 Farmer John's N cows (1 <= N < ...
- java 动态规划解决最大连续子数列和
很多动态规划算法非常像数学中的递推.我们如果能找到一个合适的递推公式,就能很容易的解决问题.我们用dp[n]表示以第n个数结尾的最大连续子序列的和,这里第n个数必须在子序列中.于是存在以下递推公式: ...
- 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.5.4 HAVING子句
1.5.4 HAVING子句正在更新内容.请稍后
- [数据集]新浪微博数据集MicroblogPCU
数据集下载地址:下载 摘要:MicroblogPCU是从新浪微博採集到的.它能够被用于研究机器学习方法和社会关系研究. 这个数据集被原作者用于探索微博中的spammers(发送垃圾信息的人).他们的d ...
- MVC为Html对象建立一个扩展方法,使用自己的控件就像使用TextBox一样方便
先看一下我想要的结果: 很容易它就是一个单选按钮组,当我后台为Html对象(HtmlHelper的一个实例,它被定义在System.Web.Mvc名称空间下的WebViewPage类,即它对于所有MV ...
- [学习笔记]渗透测试metasploit
1.渗透成功后,在meterpreter命令行,需要使用如下命令切换当前目录.更多信息,可以参考: meterpreter > pwd C:\ meterpreter > cd /&quo ...
- 微信企业号调用js-sdk注意事项
企业号应用必须添加可信域名,域名必须通过备案,可以是子域名,如果网站带端口,一定也要加上端口号...踩坑记
- css3动画应用-音乐唱片旋转播放特效
css3动画应用-音乐唱片旋转播放特效 核心点: 1.设置图片为圆形居中,使图片一直不停旋转. 2.文字标题(潘玮柏--反转地球)一直从左到右不停循环移动. 3.点击图标,音乐暂停,图片停止旋转:点击 ...
- bzoj 2726 任务安排
题目大意: 机器上有N个需要处理的任务,它们构成了一个序列 把这些任务分成若干批 从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti 在每批任务开始前,机器需要启动时间S,而完成这批 ...
- bzoj 3232 圈地游戏 —— 01分数规划+最小割建图(最大权闭合子图)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3232 心烦意乱的时候调这道题真是...越调越气,就这样过了一晚上... 今天再认真看看,找出 ...
- uva 11401
Triangle Counting Input: Standard Input Output: Standard Output You are given n rods of length 1, 2… ...
- 不让浏览器缓存input的值
方法一: 在不想使用缓存的input中添加 autocomplete="off"eg: <input type="text" autocomplete=& ...