5236. 【NOIP2017模拟8.7A组】利普希茨

(File IO): input:lipschitz.in output:lipschitz.out

Time Limits: 1000 ms Memory Limits: 524288 KB Detailed Limits

Description

Input

输入文件名为lipschitz.in。

第一行一个整数n。

接下来一行n个整数,描述序列A。

第三行一个数q 。

接下来q行,每行三个整数。其中第一个整数type表示操作的类型。 type=0对应修改操作, type=1对应查询操作。

Output

输出文件名为lipschitz.out。

对于每个查询,给出f(A[l..r]) 。

Sample Input

输入1:

6

90 50 78 0 96 20

6

0 1 35

1 1 4

0 1 67

0 4 11

0 3 96

1 3 5

输入2:

50

544 944 200 704 400 150 8 964 666 596 850 608 452 103 988 760 370 723 350 862 856 0 724 544 668 891 575 448 16 613 952 745 990 459 740 960 752 194 335 575 525 12 618 80 618 224 240 600 562 283

10

1 6 6

1 1 3

0 11 78279

0 33 42738

0 45 67270

1 1 26

1 19 24

1 37 39

1 8 13

0 7 64428

Sample Output

输出1:

78

85

输出2:

0

744

77683

856

558

77683

Data Constraint

对于30%的数据,n,q<=500

对于60%的数据,n,q<=5000

对于100%的数据,n,q<=100000,0<=ai,val<=10^9

题解

可以转化成坐标

对于每个点(x,y),y表示Ax,先把公式列出来

f(A)=maxi<j⌈|Aj−Ai|j−i⌉

显然,对于任意两点,|Aj−Ai|j−i求出来的就是斜率

因此,只用找到斜率最大的就可以了

对于ABC三点,lAB的斜率比lAC大

对于ABD三点,lBC的斜率比lAD大

所以,在三点中,一定存在相邻的两点最优

因此f(A)=max|Ai+1−Ai|

用线段树维护一下Ai+1−Ai就行了

代码

#include<cstdio>
#include<algorithm>
#define N 100010 struct node{
long maxx;
node *lc,*rc;
}*head;
void init(node* &now)
{
now=new node;
now->maxx=0;
now->lc=now->rc=NULL;
}
void build(long l,long r,node* &now=head)
{
init(now);
if(l!=r){
long mid=(l+r)>>1;
build(l,mid,now->lc);
build(mid+1,r,now->rc);
}
}
void change(long l,long r,long x,long key,node* &now=head)
{
if(l==r)now->maxx=key;
else{
long mid=(l+r)>>1;
if(x<=mid)
change(l,mid,x,key,now->lc);
else
change(mid+1,r,x,key,now->rc);
now->maxx=std::max(now->lc->maxx,now->rc->maxx);
}
}
long query(long l,long r,long x,long y,node *now=head)
{
if(x<=l&&r<=y)return now->maxx;
else{
long mid=(l+r)>>1,maxx=0;
if(x<=mid)
maxx=std::max(maxx,query(l,mid,x,y,now->lc));
if(y>mid)
maxx=std::max(maxx,query(mid+1,r,x,y,now->rc));
return maxx;
}
} long a[N]; int main()
{ long n,m,i,x,y,z;
freopen("lipschitz.in","r",stdin);
freopen("lipschitz.out","w",stdout);
scanf("%ld",&n);
build(1,n);
for(i=1;i<=n;i++){
scanf("%ld",&a[i]);
if(i!=1)
change(1,n,i-1,abs(a[i-1]-a[i]));
}
change(1,n,n,a[n]);
scanf("%ld",&m);
for(i=1;i<=m;i++){
scanf("%ld%ld%ld",&x,&y,&z);
if(!x){
a[y]=z;
change(1,n,y-1,abs(a[y-1]-a[y]));
change(1,n,y,abs(a[y]-a[y+1]));
}else
printf("%ld\n",query(1,n,y,z-1));
}
return 0;
}

JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨的更多相关文章

  1. JZOJ.5236【NOIP2017模拟8.7】利普希茨

    Description

  2. JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列

    5235. [NOIP2017模拟8.7A组]好的排列 (File IO): input:permutation.in output:permutation.out Time Limits: 1000 ...

  3. [jzoj 5343] [NOIP2017模拟9.3A组] 健美猫 解题报告 (差分)

    题目链接: http://172.16.0.132/senior/#main/show/5343 题目: 题解: 记旋转i次之后的答案为$ans_i$,分别考虑每个元素对ans数组的贡献 若$s_i& ...

  4. JZOJ 5246. 【NOIP2017模拟8.8A组】Trip(trip)

    5246. [NOIP2017模拟8.8A组]Trip(trip) (File IO): input:trip.in output:trip.out Time Limits: 1500 ms Memo ...

  5. JZOJ 3526. 【NOIP2013模拟11.7A组】不等式(solve)

    3526. [NOIP2013模拟11.7A组]不等式(solve) (File IO): input:solve.in output:solve.out Time Limits: 1000 ms M ...

  6. JZOJ 【NOIP2017提高A组模拟9.14】捕老鼠

    JZOJ [NOIP2017提高A组模拟9.14]捕老鼠 题目 Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕 ...

  7. JZOJ 5230. 【NOIP2017模拟A组模拟8.5】队伍统计

    5230. [NOIP2017模拟A组模拟8.5]队伍统计 (File IO): input:count.in output:count.out Time Limits: 1500 ms Memory ...

  8. JZOJ 4273. 【NOIP2015模拟10.28B组】圣章-精灵使的魔法语

    4273. [NOIP2015模拟10.28B组]圣章-精灵使的魔法语 (File IO): input:elf.in output:elf.out Time Limits: 1000 ms  Mem ...

  9. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...

随机推荐

  1. java面试和笔试大全

    2.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java.lang.String类是final类型 ...

  2. 吴裕雄--天生自然 JAVA开发学习:MySQL 连接

    CREATE TABLE `websites` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL DEFAULT '' ...

  3. javascript 获取 sx:datetimepicker 的值

     <div align="center"><sx:datetimepicker label="Start_Time" id="S ...

  4. iOS火焰动画效果、图文混排框架、StackView效果、偏好设置、底部手势等源码

    iOS精选源码 高性能图文混排框架,构架顺滑的iOS应用. 使用OpenGLE覆盖阿尔法通道视频动画播放器视图. 可选最大日期截至当日日期的日期轮选器ChooseDatePicker 简单轻量的图片浏 ...

  5. python语法基础-面向对象-基础-长期维护

    ###############    类的基本操作    ############## """ 类的基本认识: 1,类就是一个模子 2,dict,list都是类,具体的一 ...

  6. deeplearning.ai 卷积神经网络 Week 2 卷积神经网络经典架构

    1. Case study:学习经典网络的原因是它们可以被迁移到其他任务中. 1.1)几种经典的网络: a)LeNet-5(LeCun et al., 1998. Gradient-based lea ...

  7. PEAKS|NovoHMM|Nover|DeepNovo|MAYUPercolator|UniprotKB|Swiss-prot|Mascot|SEQUEST|X!Tandem|pFind|MaxQuant|Msconvert|PEPMASS|LC|

    质谱仪: 质谱分析法是先将大分子电离为带电粒子,按质核比分离,由质谱仪识别电信号得到质谱图. Top-down直接得到结果是蛋白. Bottom down使用shutgun方法得到结果是肽段. 由蛋白 ...

  8. python可变类型和不可变类型,深拷贝vs浅拷贝

    转载:https://www.cnblogs.com/huamingao/p/5809936.html 核心提示: 可变类型 Vs 不可变类型 可变类型(mutable):列表,字典 不可变类型(un ...

  9. eclipse批量替换,修改变量名或单词(两种方法)

    第一种(常用): ①如图:双击选中变量名id,右键选择Refactor中的Rename ②之后如下图所示,红箭头的带有方框的就是选中修改的变量名,此时修改提示框的内容,后面带方框的也跟着修改, 而蓝色 ...

  10. Hexo快速搭建博客

    1. 准备工作 ~ 安装node.js -> npm -> hexo-cli ~ 安装git -> 版本控制工具 2. 更换npm(nodejs package manager)源 ...