链接:https://www.nowcoder.com/acm/contest/158/B

求最长连续严格递增序列

线段树模板题,码力弱的一匹调了半天。。

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define M 100010
 5 #define ls node*2
 6 #define rs node*2+1
 7 using namespace std;
 8 int n,m;
 9 int a[M],ml[M<<2],mr[M<<2],L[M<<2],R[M<<2],val[M<<2];
10 void update(int node,int l,int r)
11 {
12     int ans=0;
13     if(R[ls]<L[rs]) ans=mr[ls]+ml[rs];
14     val[node]=max(max(val[ls],val[rs]),ans);
15     L[node]=L[ls]; R[node]=R[rs];
16     int mid=(l+r)/2;
17     ml[node]=ml[ls]; mr[node]=mr[rs];
18     if(ml[ls]==mid-l+1&&R[ls]<L[rs]) ml[node]=ml[ls]+ml[rs];
19     if(mr[rs]==r-mid&&R[ls]<L[rs]) mr[node]=mr[rs]+mr[ls];
20 }
21 void build(int node,int l,int r)
22 {
23     if(l==r)
24     {
25         L[node]=R[node]=a[l];
26         ml[node]=mr[node]=val[node]=1;
27         return;
28     }
29     int mid=(l+r)/2;
30     build(ls,l,mid);
31     build(rs,mid+1,r);
32     update(node,l,r);
33 }
34 void change(int node,int l,int r,int k,int x)
35 {
36     if(l==r)
37     {
38         L[node]=R[node]=x;
39         return;
40     }
41     int mid=(l+r)/2;
42     if(k<=mid) change(ls,l,mid,k,x);
43     else change(rs,mid+1,r,k,x);
44     update(node,l,r);
45 }
46 int main()
47 {
48     scanf("%d%d",&n,&m);
49     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
50     build(1,1,n);
51     printf("%d\n",val[1]);
52     for(int i=1;i<=m;i++)
53     {
54         int x,y; scanf("%d%d",&x,&y);
55         change(1,1,n,x,y);
56         printf("%d\n",val[1]);
57     }
58     return 0;
59 }

转载于:https://www.cnblogs.com/Slrslr/p/9532899.html

[nowcoder]最长区间相关推荐

  1. 牛客练习赛25 B-最长区间

    题目链接: 题目描述 给你一个长度为 n 的序列 a ,求最长的连续的严格上升区间的长度. 同时会进行 m 次修改,给定 x , y ,表示将 ax 修改为 y ,每次修改之后都要求输出答案. 输入描 ...

  2. 线段树区间合并--询问某段区间内最长连续上升子序列即最长上升子串

    链接:https://www.nowcoder.com/acm/contest/158/B 来源:牛客网 最长区间 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...

  3. 【nowcoder 224882】牛牛和数组操作(贪心)(剪枝)(区间DP)

    牛牛和数组操作 题目链接:nowcoder 224882 题目大意 给你一个没有 0 的数组,每次你可以选一个数,然后把它变成 0,费用是它两边为端点最长的没有 0 的最长区间的最大值. 然后要你在最 ...

  4. 线段树维护(最大区间和,最大子段和,最长连续上升子序列)

    本文主要介绍用线段树来维护(最大区间和,最大子段和,最长连续上升子序列)的问题. HDU 1540 Tunnel Warfare(最长连续区间+单点修改) 洛谷 P2894 [USACO08FEB]酒 ...

  5. Python每日一练:最长递增区间狄杰斯特拉(80分)K树(0分)

    文章目录 前言 一.最长递增区间 二.狄杰斯特拉(80) 三.K树(0) 总结 前言 很显然,Python的受众远远大于C++,其实笔者本人对Python的理解也是远强于C++的,C++纯粹是为了假装 ...

  6. 【BZOJ 1202】 [HNOI2005]狡猾的商人(枚举区间也可行)

    题链:http://www.lydsy.com/JudgeOnline/problem.php?id=1202 其实也可以不使用加权并查集,通过画图可以发现,一个长区间和其包含的区间能够算出一个新区间 ...

  7. 动态规划——区间dp

    在利用动态规划解决的一些实际问题当中,一类是基于区间上进行的,总的来说,这种区间dp是属于线性dp的一种.但是我们为了更好的分类,这里仍将其单独拿出进行分析讨论. 让我们结合一个题目开始对区间dp的探 ...

  8. BZOJ4653 洛谷1712 UOJ222:[NOI2016]区间——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4653 https://www.luogu.org/problemnew/show/P1712 ht ...

  9. 线段树练习——区间合并

    这类题目会询问区间中满足条件的连续最长区间,所以PushUp的时候需要对左右儿子的区间进行合并(这里最难理解) hdu 3308 http://acm.hdu.edu.cn/showproblem.p ...

  10. [UOJ #222][NOI2016]区间(线段树)

    Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...

最新文章

  1. 配置.net 3.0开发环境
  2. TVM: Deep Learning模型的优化编译器(强烈推荐, 附踩坑记录)
  3. 半导体理论(第2部分)半导体掺杂
  4. Django Bakend--后台管理插件开发-01
  5. linux安装pl sql,Linux上安装配置InstantClient及64位系统Pl/SQL配置
  6. 六年级计算机应用计划,2017六年级信息技术下册教学计划
  7. Java中static作用及用法详解
  8. CentOS hadoop 分布式集群的搭建
  9. matlab简单分析模拟滤波器 IIR
  10. 【莫队】【P3901】 数列找不同
  11. 老司机 iOS 周报 #42 | 2018-11-05
  12. c语言的dll反编译,可怕的DLL反编译工具(DLL to C)
  13. 记录一次pl2303串口驱动解决故障
  14. 组件上传之AspUpload使用方法
  15. 德玛西亚皇子背景故事
  16. Jenkins自动化部署学习笔记(二、在Windows系统上使用Jenkins.war直接运行 )
  17. C语言结构体typedef struct详解
  18. [ASP.NET网站开发] web程序设计,期末作业,问卷填写与学生选课管理系统(超简单,容易懂!课程考核必过)(使用内置数据库)
  19. eb8000软件怎样上传_EB8000程序上传与下载
  20. bootstrap的使用方法及其基本模板

热门文章

  1. 你没听过的IT技术解读,能秒懂的都是老司机...
  2. 不会写漂亮代码不是优秀的程序员,没有钢铁侠之躯不是合格的程序员
  3. Python必不可少的小技巧,一行代码减少一半内存占用!
  4. Android欢迎页短暂白屏
  5. 【ubuntu】出现device not managed连接不上网络
  6. C语言结构体初始化(转载)
  7. setCompoundDrawables和setCompoundDrawablesWithIntrinsicBounds区别
  8. memcached罢工引发的血案-博客园评论超时问题处理过程
  9. 线段树模板--单点更新+区间求和
  10. Python学习之路:socket网络编程