time limit per test1 second

memory limit per test256 megabytes

inputstandard input

outputstandard output

A function is called Lipschitz continuous if there is a real constant K such that the inequality |f(x) - f(y)| ≤ K·|x - y| holds for all . We’ll deal with a more… discrete version of this term.

For an array , we define it’s Lipschitz constant as follows:

if n < 2,

if n ≥ 2, over all 1 ≤ i < j ≤ n

In other words, is the smallest non-negative integer such that |h[i] - h[j]| ≤ L·|i - j| holds for all 1 ≤ i, j ≤ n.

You are given an array of size n and q queries of the form [l, r]. For each query, consider the subarray ; determine the sum of Lipschitz constants of all subarrays of .

Input

The first line of the input contains two space-separated integers n and q (2 ≤ n ≤ 100 000 and 1 ≤ q ≤ 100) — the number of elements in array and the number of queries respectively.

The second line contains n space-separated integers ().

The following q lines describe queries. The i-th of those lines contains two space-separated integers li and ri (1 ≤ li < ri ≤ n).

Output

Print the answers to all queries in the order in which they are given in the input. For the i-th query, print one line containing a single integer — the sum of Lipschitz constants of all subarrays of .

Examples

input

10 4

1 5 2 9 1 3 4 2 1 7

2 4

3 8

7 10

1 9

output

17

82

23

210

input

7 6

5 7 7 4 6 6 2

1 2

2 3

2 6

1 7

4 7

3 5

output

2

0

22

59

16

8

Note

In the first query of the first sample, the Lipschitz constants of subarrays of with length at least 2 are:

The answer to the query is their sum.

【题目链接】:http://codeforces.com/contest/602/problem/D

【题解】



题意:

给你n个数字;

然后给你q个区间

每个区间l,r

让你求出[l,r]这个区间里面的数字的所有子列的L(h)的值的和;

(L(h)是任意两个点的斜率的绝对值的最大值);

做法:

可以肯定让你求L..R这个子列的区间的L(h)值

L(h)值必然是在abs(a[i]-a[i-1])中取到(i∈【L..R-1】)

可以看下图;



假设斜率的最大值不在相邻的两点之间得到;

设中间还有一个k;

则如果ak大于ai,则ai,ak连起来肯定更优,肯定比ai,aj连起来的斜率大

如果ak小于ai的话,则是ak,aj连起来更优;

总之只有在i,j相邻的时候,斜率才可能取到最大;

这样的话,我们就先把L..R这个区间内的相邻的数的差的绝对值处理出来

变为bi数组

然后枚举第bi中的第i个数字为斜率的最大值

看看这第i个数字能够“管理”“统治”的区间范围;

然后这段区间里面只要包括这第i个数字,则最大值肯定是就是第i个数字;

设其左边有l[i]个数字,右边有r[i]个数字

则答案递增l[i]*r[i]*b[i];

(左边选取l[i]个数字中的一个作为左端点,右边选取r[i]中的一个数字作为右端点,两个点组合成一个包围第i个点的区间);

这种问题可以用单调队列来搞;(单调栈?)

但是要注意重复的问题,所以左边在判断的时候加等号

右边判断的时候不加等号;

这样就不会重复计数了;

(可以拿样例中的第二组询问来理解这个重复区间的问题);



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int MAXN = 1e5+10;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0); int n,q,top;
LL l[MAXN],r[MAXN],b[MAXN],a[MAXN];
int s[MAXN]; int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);rei(q);
rep1(i,1,n)
rel(a[i]);
rep1(i,1,q)
{
LL L,R,len,ans = 0;
rel(L);rel(R);
len = R-L;
rep1(j,L,R-1)
b[j-L+1] = abs(a[j+1]-a[j]);
//j∈L..R-1
top=0;
for (LL j = 1;j <= len;j++)
{
while (top && b[j]>=b[s[top]]) top--;//加等号
if (top==0)
l[j] = 0;
else
l[j] = s[top];
//s[top]>b[j]
s[++top] = j;
}
top = 0;
for (LL j = len;j >=1 ;j--)
{
while (top && b[j]>b[s[top]]) top--;//不加等号
if (top==0)
r[j] = len+1;
else
r[j] = s[top];
//s[top]>b[j]
s[++top] = j;
}
for (LL j = 1;j <= len;j++)
ans+=(j-l[j])*(r[j]-j)*b[j];
cout << ans << endl;
}
return 0;
}

【codeforces 602D】Lipshitz Sequence的更多相关文章

  1. 【codeforces 466D】Increase Sequence

    [题目链接]:http://codeforces.com/problemset/problem/466/D [题意] 给你n个数字; 让你选择若干个区间; 且这些区间[li,ri]; 左端点不能一样; ...

  2. 【codeforces 623E】 Transforming Sequence

    http://codeforces.com/problemset/problem/623/E (题目链接) 题意 长度为${n}$的满足前缀按位或为单调递增的${k}$位序列.要求每个位置为${[1, ...

  3. 【CodeForces 622A】Infinite Sequence

    题意 一个序列是, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5....这样排的,求第n个是什么数字. 分析 第n个位置属于1到k,求出k,然后n-i*(i-1)/ ...

  4. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  5. 【47.40%】【codeforces 743B】Chloe and the sequence

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  6. 【codeforces 438D】The Child and Sequence

    [原题题面]传送门 [大致题意] 给定一个长度为n的非负整数序列a,你需要支持以下操作: 1:给定l,r,输出a[l]+a[l+1]+…+a[r]. 2:给定l,r,x,将a[l],a[l+1],…, ...

  7. 【66.47%】【codeforces 556B】Case of Fake Numbers

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  8. 【35.29%】【codeforces 557C】Arthur and Table

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  9. 【23.33%】【codeforces 557B】Pasha and Tea

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

随机推荐

  1. Android 小米盒子游戏手柄按键捕获 - 能获取到的 home 键依旧是个痛

    Android 小米盒子游戏手柄按键捕获 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 ...

  2. Spark 概念学习系列之Spark存储管理机制

    Spark存储管理机制 概要 01 存储管理概述 02 RDD持久化 03 Shuffle数据存储 04 广播变量与累加器 01 存储管理概述 思考: RDD,我们可以直接使用而无须关心它的实现细节, ...

  3. Python画图参数设置

    https://blog.csdn.net/qiu931110/article/details/68130199

  4. Jszip的使用和打包下载图片

    因为canvas总结到后面又想到了jszip的一些事情,那就索性也回去看看吧.试过,至少谷歌和火狐都是支持jszip的. 1.  jszip的使用 官方文档说的很清楚了,而且也有读取zip文件.生成z ...

  5. 学习笔记:Vue——插槽

    关于Vue插槽,只用过最简单的语法,现在完整地走一遍官方文档说明,并且探索更多用法. 01.如果组件中没有包含一个<slot>元素,则该组件起始标签和结束标签之间的任何内容都会被抛弃. 0 ...

  6. (最新)使用爬虫刷CSDN博客访问量——亲测有效

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 1.概述 前言:前两天刚写了第一篇博客https://blog.csdn.net/qq_41782425/article/deta ...

  7. java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: student is not mapped

    Spring 5.0 +Jpa,使用@Query实现 自定义查询报错: java.lang.IllegalArgumentException: org.hibernate.hql.internal.a ...

  8. zoj 2724 Windows Message Queue 优先队列

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1724 题目大意: 给出两种操作,GET要求取出当前队首的元素,而PUT会输入名 ...

  9. IT人都很忙(茫)

    我发现,身边的盆友都很忙,要么在加班,要么加班刚回家:要么在出差,要么刚出差回来. 难道搞IT的人都很忙么?忙还是茫? 大学期间,不知道未来要干什么,很多人也不清楚应该学习哪些知识和技能,是否需要考证 ...

  10. 关于浏览器不能执行JavaScrip问题的反思

    今天在一篇博客(http://blog.csdn.net/u011043843/article/details/27959563)的时候,写着用于演示的Javascript代码不能再浏览器执行,非常是 ...