更新一个点;

求某个区间的最长连续上升序列;

链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308

 #include <cstdio>
#include <algorithm>
using namespace std;
#define maxn 100009
#define mid int m=(l+r)>>1
int num[maxn], lsum[maxn<<], rsum[maxn<<], msum[maxn<<], n, m, p, v, a, b;
void pushup(int o, int l, int r)
{
mid;
if (num[m] < num[m+])
{
lsum[o] = (lsum[o<<] == m+-l) ? (m+-l+lsum[o<<|]) : lsum[o<<];
rsum[o] = (rsum[o<<|] == r-m) ? (r-m+rsum[o<<]) : rsum[o<<|];
msum[o] = max(max(msum[o<<], msum[o<<|]), lsum[o<<|] + rsum[o<<]);
}
else lsum[o] = lsum[o<<], rsum[o] = rsum[o<<|], msum[o] = max(msum[o<<], msum[o<<|]);
}
void build(int o, int l, int r)
{
if (l == r) {lsum[o]= rsum[o] = msum[o] = ; return;}
mid; build(o<<, l, m), build(o<<|, m+, r), pushup(o, l, r);
}
void update(int o, int l, int r)
{
if (l == r) {num[p] = v; return;}
mid; if (p <= m) update(o<<, l, m); else update(o<<|, m+, r); pushup(o, l, r);
}
int query(int o, int l, int r)
{
if (a <= l && b >= r) return msum[o];
mid; int ret = ;
if (a <= m) ret = max(ret, query(o<<, l, m)); if (b > m) ret = max(ret, query(o<<|, m+, r));
if (num[m] < num[m+]) ret = max(ret, min(m-a+, rsum[o<<])+min(b-m, lsum[o<<|])); return ret;
}
int main(void)
{
int t, n, m; char ch[]; scanf("%d", &t);
while (t--)
{
scanf("%d%d", &n, &m); for (int i = ; i <= n; scanf("%d", num+i++)); build(, , n);
while (m--)
{
scanf("%s%d%d", ch, &a, &b); a++, b++;
if (ch[] == 'Q') printf("%d\n", query(, , n)); else p = a, v = b-, update(, , n);
}
}
return ;
}

。。

hdu3308 线段树——区间合并的更多相关文章

  1. HDU3308 线段树区间合并

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 ,简单的线段树区间合并. 线段树的区间合并:一般是要求求最长连续区间,在PushUp()函数中实 ...

  2. LCIS hdu3308 (线段树 区间合并)

    题意: 有两种操作  一种是单点改为b  一种是给出区间ab  区间ab的最大上升子序列个数.. 线段树目前学了三种  第一种单点操作很简单   第二种区域操作加上懒惰标记即可 现在这种 为区间合并. ...

  3. hdu3308 线段树 区间合并

    给n个数字 U表示第A个数改为B.A是从0开始. Q输出最大的递增序列个数. 考虑左边,右边,和最大的. #include<stdio.h> #define lson l,m,rt< ...

  4. hdu-3308 LCIS (线段树区间合并)

    LCIS Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. POJ 3667 Hotel(线段树 区间合并)

    Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...

  6. HDU 3911 线段树区间合并、异或取反操作

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3911 线段树区间合并的题目,解释一下代码中声明数组的作用: m1是区间内连续1的最长长度,m0是区间内连续 ...

  7. HDU 3911 Black And White(线段树区间合并+lazy操作)

    开始以为是水题,结果...... 给你一些只有两种颜色的石头,0为白色,1为黑色. 然后两个操作: 1 l r 将[ l , r ]内的颜色取反 0 l r 计算[ l , r ]内最长连续黑色石头的 ...

  8. HYSBZ 1858 线段树 区间合并

    //Accepted 14560 KB 1532 ms //线段树 区间合并 /* 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[ ...

  9. poj3667 线段树 区间合并

    //Accepted 3728 KB 1079 ms //线段树 区间合并 #include <cstdio> #include <cstring> #include < ...

随机推荐

  1. Ibatis.Net 数据库操作(四)

    一.查询select 还记得第一篇示例中的是如何读出数据库里的3条数据吗? 就是调用了一个QueryForList方法,从方法名就知道,查询返回列表. 1.QueryForList 返回List< ...

  2. bitmap格式分析

    位图(Bitmap)当然是最简单的,它Windows显示图片的基本格式,其文件扩展名为*.BMP.在Windows下,任何各式的图片文件(包括视频播放)都要转化为位图个时候才能显示出来,各种格式的图片 ...

  3. HDU 1098 Ignatius's puzzle 费马小定理+扩展欧几里德算法

    题目大意: 给定k,找到一个满足的a使任意的x都满足 f(x)=5*x^13+13*x^5+k*a*x 被65整除 推证: f(x) = (5*x^12 + 13 * x^4 + ak) * x 因为 ...

  4. (转载)重新对APK文件签名

    1.将证书(debug.keystore)复制到与需要重新签名的apk文件相同的目录下(如:复制到D:\Sign) 2.在cmd中切换到需要重新签名的apk文件的目录下 3.使用WinRAR打开要重新 ...

  5. Xceed WPF 主题皮肤控件Xceed Professional Themes for WPF详细介绍

    Xceed Professional Themes for WPF是一款为你的整个应用程序提供完美WPF主题风格的控件,包含Office 2007和Windows 7,可以应用到任何微软官方的WPF控 ...

  6. 通过获取DNS解析的未转义主机名,区分测试环境和正式环境代码

    ASP.Net编程中经常有一些代码,测试环境下需要执行,而正式环境下不需要执行(或者反之). 我们经常做的方式是:去掉注释,测试,再注释,再编译上传(或者反之). 现在,不妨试试以下办法: Reque ...

  7. 一篇文章教你学会基础的HTML

    html是学习做网页的基础,漂亮的网页与布局就是由有些html代码组成,大家看完这篇文章就可以简单的了解html了,多写多练     如果你不致力于成为美工的话,那么作为开发人员,可以读懂HTML.必 ...

  8. 一个由印度人编写的VC串口类

    http://www.cnblogs.com/lwngreat/p/4098374.html 软件介绍 一个由印度人编写的VC串口类(也是一种VC串口控件),他还配合这个类写了VC 串口通信方面的一些 ...

  9. php大力力 [020节]mysql数据库唯一id字段如何设置

    2015-08-26 php大力力020.mysql数据库唯一id字段如何设置 不懂 以下有些文章 mysql唯一id 自动生成 uuid mysql 里面可以用uuid()语句来生成一个UUID:s ...

  10. BZOJ 2292 永远挑战

    最短路. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm&g ...