区间合并比较模板的题,就是求一个区间的LCIS

线段树维护左最大LCIS,右最大LCIS,区间LCIS

看代码就行

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<algorithm>
  5. using namespace std;
  6. #define lson l,m,rt<<1
  7. #define rson m+1,r,rt<<1|1
  8. #define maxn 100005
  9. int lval[maxn<<],rval[maxn<<];//Çø¼ä×óÓҶ˵ãÖµ
  10. int lmx[maxn<<],rmx[maxn<<],mx[maxn<<];//Çø¼ä×ó²àLCIS£¬Çø¼äÓÒ²àLCIS£¬Çø¼äLCIS
  11. inline void pushup(int rt,int l,int r){
  12. lval[rt]=lval[rt<<];rval[rt]=rval[rt<<|];//¸üÐÂ×óÓҶ˵ã
  13. //¸üÐÂ×óÓÒLCISºÍLCIS
  14. lmx[rt]=lmx[rt<<];//×ó¶Ë
  15. rmx[rt]=rmx[rt<<|];//ÓÒ¶Ë
  16. mx[rt]=max(mx[rt<<],mx[rt<<|]);
  17.  
  18. int m=l+r>>;
  19. int lenl=m-l+,lenr=r-m;//×óÓÒ×ÓÇø¼ä³¤¶È
  20. if(rval[rt<<]<lval[rt<<|]){//ºÏ²¢
  21.  
  22. if(lmx[rt<<]==lenl)
  23. lmx[rt]+=lmx[rt<<|];
  24. if(rmx[rt<<|]==lenr)
  25. rmx[rt]+=rmx[rt<<];
  26. mx[rt]=max(mx[rt],rmx[rt<<]+lmx[rt<<|]);
  27. }
  28. mx[rt]=max(mx[rt],max(lmx[rt],rmx[rt]));
  29. }
  30. void build(int l,int r,int rt){
  31. if(l==r){
  32. scanf("%d",&lval[rt]);
  33. rval[rt]=lval[rt];
  34. lmx[rt]=rmx[rt]=mx[rt]=;
  35. return;
  36. }
  37. int m=l+r>>;
  38. build(lson);
  39. build(rson);
  40. pushup(rt,l,r);
  41. }
  42. void update(int pos,int c,int l,int r,int rt){
  43. if(l==r){
  44. lval[rt]=rval[rt]=c;
  45. return;
  46. }
  47. int m=l+r>>;
  48. if(pos<=m) update(pos,c,lson);
  49. else if(pos>m) update(pos,c,rson);
  50. pushup(rt,l,r);
  51. }
  52. int query(int L,int R,int l,int r,int rt){
  53. if(L<=l && R>=r){
  54. return mx[rt];
  55. }
  56. int m=l+r>>;
  57. if(R<=m) return query(L,R,lson);//Èç¹û[L,R]ÔÚ×óÇø¼ä
  58. else if(L>m) return query(L,R,rson);
  59. else {//µ½Á½¸öÇø¼äÀï²éÕÒ
  60. int temp1=query(L,R,lson);
  61. int temp2=query(L,R,rson);
  62. int temp3=;
  63. if(rval[rt<<]<lval[rt<<|]){
  64. temp3+=min(m-L+,rmx[rt<<]);
  65. temp3+=min(R-m,lmx[rt<<|]);
  66. }
  67. /*return max(temp3,max(temp1,temp2));*///¶ÔÓÚÁ½¸ö×ÓÇø¼ä£¬Ö»ÓÐÈýÖÖÇé¿ö×÷Ϊ×îÖÕ½á¹û£¬Ò»ÊÇ×óÇø¼äµÄLCIS£¬¶þÊÇÓÒÇø¼äµÄLCIS£¬ÈýÊǺϲ¢ºóÖмäµÄÄÇÒ»¶Î
  68. return max(max(temp1,temp2),temp3);
  69. }
  70. }
  71.  
  72. int main(){
  73. int T,n,q;
  74. scanf("%d",&T);
  75. while(T--){
  76. scanf("%d%d",&n,&q);
  77. build(,n-,);
  78.  
  79. int a,b;
  80. char op[];
  81. while(q--){
  82. scanf("%s%d%d",op,&a,&b);
  83. if(op[]=='Q') printf("%d\n",query(a,b,,n-,));
  84. else update(a,b,,n-,);
  85. }
  86. }
  87. return ;
  88. }

hdu3308的更多相关文章

  1. hdu3308 线段树 区间合并

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

  2. hdu3308 线段树——区间合并

    更新一个点: 求某个区间的最长连续上升序列: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 #include <cstdio> #in ...

  3. HDU-3308 LCIS(区间合并)

    题目大意:给一个整数序列,m次询问,每次询问某个区间中最长连续上升子序列的长度. 题目分析:线段树区间合并.维护以区间左端开头的.以区间右端点结尾的和区间最长的上升连续序列. 代码如下: # incl ...

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

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

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

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

  6. HDU3308 线段树(区间合并)

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

  7. HDU3308(LCIS) 线段树好题

    题目链接:传送门 题目大意:给你n个数,m个操作.操作有两种:1.U x y 将数组第x位变为y   2. Q x y 问数组第x位到第y位连续最长子序列的长度.对于每次询问,输出一个答案 题目思路: ...

  8. HDU3308 线段树区间合并

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

  9. HDU3308 LCIS

    Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Description Given n ...

随机推荐

  1. HDU1199 动态线段树 // 离散化

    附动态线段树AC代码 http://acm.hdu.edu.cn/showproblem.php?pid=1199 因为昨天做了一道动态线段树的缘故,今天遇到了这题没有限制范围的题就自然而然想到了动态 ...

  2. 易捷支付完整业务流程的lr脚本编写

    业务流程:1.注册2.登录3.重置支付密码4.下订单5.支付订单6.查看订单列表 通用md5.h代码如下: #ifndef MD5_H #define MD5_H #ifdef __alpha typ ...

  3. Cookie浅谈

    相信大家对Cookie多多少少都有点了解吧~~下面我来谈谈吧: 每个Cookie不超过4K数据,每个网站不超过20个Cookie,所有网站的Cookie总和不超过300个 虽然cookie已经是上世纪 ...

  4. Hadoop生态圈-CentOs7.5单机部署ClickHouse

    Hadoop生态圈-CentOs7.5单机部署ClickHouse 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 到了新的公司,认识了新的同事,生产环境也得你去适应新的集群环境,我 ...

  5. Bash基本功能

    bash的基本功能 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入:   高级运维工程师之路               598432640 一.历史命令和命令补全 1.历 ...

  6. strace常用参数详解

    strace常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. strace命令大家应该比我熟悉吧,如果你不知道,呵呵,会可能跟我一样被人说:“我怀疑你是假运维”,不过没关 ...

  7. Create ISO library over NFS for XEN server templates

    Based on Ubuntu – Server – install NFS on Ubuntu  – aptitude -y install nfs-kernel-server create a “ ...

  8. Python基础【day01】:python介绍发展史(一)

    本节内容 Python介绍 发展史 Python 2 or 3? 一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...

  9. C# 中对于json的解析小结

    1.解析之前的json格式 [{ "Name": "冯111", "PID": "130627199202283306" ...

  10. 使用JS监听键盘按下事件(keydown event)

    1.监听全局键盘按下事件,例如监听全局回车事件 1 $(document).keydown(function(event){ 2 if(event.keyCode == 13){ 3 alert('你 ...