思路:

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

实现:

 #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 等差子数列的更多相关文章

  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. QtQuick桌面应用开发指导 1)关于教程 2)原型和设计 3)实现UI和功能_A

    Release1.0 http://qt-project.org/wiki/developer-guides Qt Quick Application Developer Guide for Desk ...

  2. PHP中常见的header类型

    <?php // 使用 mime_content_type() 查看 $mimetypes=array( 'ez' => 'application/andrew-inset', 'hqx' ...

  3. iOS 浅谈MVC设计模式及Controllers之间的传值方式

    1.简述你对MVC的理解? MVC是一种架构设计.它考虑了三种对象:Model(模型对象).View(试图对象).Controller(试图控制器) (1)模型:负责存储.定义.操作数据 (2)视图: ...

  4. Node.js 101(2): Promise and async

    --原文地址:http://blog.chrisyip.im/nodejs-101-package-promise-and-async 先回想一下 Sagase 的项目结构: lib/ cli.js ...

  5. HTML5中meta属性

    meta属性在HTML中占据了很重要的位置.如:针对搜索引擎的SEO,文档的字符编码,设置刷新缓存等.虽然一些网页可能没有使用meta,但是作为正规军,我们还是有必要了解一些meta的属性,并且能够熟 ...

  6. XMU 1612 刘备闯三国之桃园结义 【二分】

    1612: 刘备闯三国之桃园结义 Time Limit: 1000 MS  Memory Limit: 128 MBSubmit: 181  Solved: 12[Submit][Status][We ...

  7. myqsl02

    常用的表的引擎 Myisam ,批量插入速度快, 不支持事务,锁表 Innodb, 批量插入相对较慢,支持事务,锁行. 全文索引:目前5.5版本,myisam,innodb都已经支持 关于事务的引擎: ...

  8. I.MX6 Battery issues

    /******************************************************************** * I.MX6 Battery issues * 说明: * ...

  9. 并不对劲的bzoj5342:loj2554:uoj401:p4566: [Ctsc2018]青蕈领主

    题目大意 \(T\)(\(T\leq100\))组询问 有\(1\)到\(n\)(\(n\leq50000\))这\(n\)个整数组成的一个排列 定义这个排列的一个子区间是"连续" ...

  10. 【SCOI 2005】 互不侵犯

    [题目链接] 点击打开链接 [算法] 和HDU2167类似 先搜出一行内符合的状态,然后,f[i][j][k]表示第i行,第j种状态,放了k个,合法的方案,DP即可 [代码] #include< ...