hud 3308 LCIS 线段树 区间合并
题意:
Q a b 查询[a, b]区间的最长连续递增子序列的长度
U a b 将下表为a的元素更新为b
区间合并一般都有3个数组:区间最值,左区间最值和右区间最值
具体详见代码
#include <bits/stdc++.h>
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
using namespace std; const int MAXN = 111111;
int mx[MAXN<<2], a[MAXN];
int lmx[MAXN<<2], rmx[MAXN<<2]; void push_up(int rt, int l, int r)
{
lmx[rt] = lmx[rt<<1];
rmx[rt] = rmx[rt<<1|1];
mx[rt] = max(mx[rt<<1], mx[rt<<1|1]);
int m = (l + r) >> 1;
if(a[m] < a[m+1]) //保证是严格递增的
{
if(lmx[rt] == m - l + 1) lmx[rt] += lmx[rt<<1|1];
if(rmx[rt] == r - m) rmx[rt] += rmx[rt<<1];
mx[rt] = max(mx[rt], rmx[rt<<1] + lmx[rt<<1|1]);
}
} void build(int l, int r, int rt)
{
if(l == r)
{
scanf("%d", &a[l]);
mx[rt] = lmx[rt] = rmx[rt] = 1;
return;
}
int m = (l + r) >> 1;
build(lson);
build(rson);
push_up(rt, l, r);
} void update(int p, int c, int l, int r, int rt)
{
if(l == r)
{
a[p] = c;
return;
}
int m = (l + r) >> 1;
if(m >= p) update(p, c, lson);
else update(p, c, rson);
push_up(rt, l, r);
} int query(int L, int R, int l, int r, int rt)
{
if(L <= l && r <= R) return mx[rt];
int m = (l + r) >> 1;
int ret = 0;
if(m >= L) ret = max(ret, query(L, R, lson));
if(m < R) ret = max(ret, query(L, R, rson));
if(a[m] < a[m+1]) //m-L+1是[L,m]的长度,R-m是[m,R]的长度
ret = max(ret, min(rmx[rt<<1], m-L+1) + min(lmx[rt<<1|1], R-m));
return ret;
} int main()
{
// freopen("in.txt", "r", stdin);
int T;
scanf("%d", &T);
while(T--)
{
int n, m;
scanf("%d%d", &n, &m);
build(0, n-1, 1);
while(m--)
{
char op[3];
int x, y;
scanf("%s%d%d", op, &x, &y);
if(op[0] == 'Q') printf("%d\n", query(x, y, 0, n-1, 1));
else update(x, y, 0, n-1, 1);
}
}
return 0;
}
hud 3308 LCIS 线段树 区间合并的更多相关文章
- HDU 3308 LCIS (线段树区间合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题目很好懂,就是单点更新,然后求区间的最长上升子序列. 线段树区间合并问题,注意合并的条件是a[ ...
- LCIS HDU - 3308 (线段树区间合并)
LCIS HDU - 3308 Given n integers. You have two operations: U A B: replace the Ath number by B. (inde ...
- hdu-3308 LCIS (线段树区间合并)
LCIS Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 3308 (线段树区间合并)
http://acm.hdu.edu.cn/showproblem.php?pid=3308 题意: 两个操作 : 1 修改 单点 a 处的值. 2 求出 区间[a,b]内的最长上升子序列. 做法 ...
- HDU 3308 LCIS 线段树区间更新
最近开始线段树一段时间了,也发现了不少大牛的博客比如HH大牛 ,小媛姐.这个题目是我在看HH大牛的线段树专题是给出的习题,(可以去他博客找找,真心推荐)原本例题是POJ3667 Hotel 这个题目 ...
- HDU 3308 LCIS (线段树·单点更新·区间合并)
题意 给你一个数组 有更新值和查询两种操作 对于每次查询 输出相应区间的最长连续递增子序列的长度 基础的线段树区间合并 线段树维护三个值 相应区间的LCIS长度(lcis) 相应区间以左 ...
- hdu 3308(线段树区间合并)
LCIS Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU3308 线段树区间合并
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 ,简单的线段树区间合并. 线段树的区间合并:一般是要求求最长连续区间,在PushUp()函数中实 ...
- POJ 3667 Hotel(线段树 区间合并)
Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...
随机推荐
- canal 环境搭建 canal 与kafka通信(三)
canal 占用了生产者 .net core端 使用消费者获取canal 消息 安装 Confluent.Kafka demo使用 1.3.0 public static void Consumer ...
- redis 处理缓存穿透
1. 缓存穿透简述 举例说明,redis中确实没有key值为"redis"数据,并且数据库里面也没有,那么每一次都会穿过缓存层,会将请求打到数据库查询,然后数据库进行查询,造成了不 ...
- Redis学习笔记七:主从集群
单机,单节点,单实例的Redis会有什么问题呢? 容易导致单点故障,那么如何解决呢? 可以通过主备方式 同时可以实现读写分离 这里的每个节点是全量的,镜像的. 单节点的容量有限而且单点的压力比较大,如 ...
- opencv——自适应阈值Canny边缘检测
前言 Canny边缘检测速度很快,OpenCV中经常会用到Canny边缘检测,以前的Demo中使用Canny边缘检测都是自己手动修改高低阈值参数,最近正好要研究点小东西时,就想能不能做个自适应的阈值, ...
- 郑政 | 2021软件代码开发技术作业四 | 需求改进&系统设计
需求改进&系统设计 -------------------------------------------------------------------------------------- ...
- Python+Selenium+Appium+API学习使用过的命令
adb devices 查看连接电脑的手机设备 weditor 启动uiautomatorviewer2元素定位工具 以下2个命令作用一样 adb shell dumpsys activity | f ...
- 转载 | python inferface使用
Python中最特别的关键字之一便是pass,它放在类或函数里,表示类和函数暂不定义. class PassClass: pass def PassFun(): pass 如上实现最精简的类和函数定义 ...
- 书列荐书 |《黑天鹅·如何应对不可预知的未来》【美】纳西姆 尼古拉斯 塔勒布 著
你不知道的事比你知道的事更有意义,因为生活中发生了许多微小的事情,尽管出现的概率非常小,但是却以某一种巨大的力量影响我们的生活.但是由于思维习惯的问题,导致我们看问题的方式使得我们不能很快地把握事物的 ...
- java 常见OPTS参数的含义
1. -XX:MaxPermSize=256m -XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配 2. java.awt.headless Headless模式是系统的 ...
- HTML基本标签及语法
HTML简介 什么是HTML 本文素材来源于黑马程序员Pink老师 HTML 指的是超文本标记语言(Hyper Text Markup Language) ,它是用来描述网页的一种语言. HTML 不 ...