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 [题目类型]线段树 ...
随机推荐
- 066.Python框架DRF之序列化器Serializer
一 序列化器-Serializer 作用: 1. 序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串 2. 反序列化,把客户端发送过来的数据,经过request以后变成 ...
- spark-steaming的exactly-once
spark实时计算中会存在数据丢失和数据重复计算的场景, 在receiver收到数据且通过driver的调度executor开始计算数据的时候如果driver突然崩溃,则此时executor就会被杀掉 ...
- Go语言之main包
Go语言的代码通过包(package)组织,包类似于其他语言里的库(libraries)或者模块(modules).一个包由位于单个目录下的一个或多个go源文件组成,目录定义包的作用.每个源文件都以一 ...
- 微信小程序从开发到上线流程
一.微信小程序从开发到上线流程 注册小程序 1.登录微信公众平台 https://mp.weixin.qq.com 2.在微信公众平台>立即注册>小程序中注册微信小程序 3.在邮箱中激活并 ...
- Linux(CentOS7)下二进制安装MySQL5.7.26
记录一下自己在 CentOS7 下二进制安装 MySQL5.7.26 的过程,之前使用 Linux(CentOS7)下rpm安装MySQL8.0.16 之后发现 rpm 方式安装不利于维护,也不利于单 ...
- pika详解(三)SelectConnection及其他Connection
pika详解(三)SelectConnection及其他Connection 本文链接:https://blog.csdn.net/comprel/article/details/94661147 ...
- TVM性能评估分析(七)
TVM性能评估分析(七) Figure 1. Performance Improvement Figure 2. Depthwise convolution Figure 3. Data Fus ...
- powerDisigner使用
最近要忙期考,但还是决定每天抽点空来写CodeSmith的系列文章了,在此实在不敢用教程这个词语,毕竟自己对CodeSmith了解的也不是很多,有很多牛人都在博客园发布了不少关于CodeSmith ...
- 一文带你了解.Net互斥锁
本文主要讲解.Net基于Threading.Mutex实现互斥锁 基础互斥锁实现 基础概念:和自旋锁一样,操作系统提供的互斥锁内部有一个数值表示锁是否已经被获取,不同的是当获取锁失败的时候,它不会反复 ...
- 新增秒杀功能、优惠券、支付宝、Docker,newbee-mall升级版开源啦!
最近是非常非常非常忙,一方面是公司的事情比较多,另外⼀点是最近在准备诉讼材料.⾄于诉讼的是谁,⼤家可以去看我之前写的几篇文章,所以本来这周是不打算更新文章的.不过,昨天慕课网的法务联系我的律师了,终于 ...