题目链接:点击查看

题目大意:给出长度为 n 的数列 a ,接下来进行 m 次操作,每次操作分为两种类型:

  1. 0 l r:询问区间 [ l , r ] 内的最长子序列之和,要求相邻两个位置的下标奇偶性不同
  2. 1 pos val:修改 pos 位置的数字为 val

题目分析:需要用到区间合并,因为下标奇偶性不同,所以在合并的时候,一共只有四种情况:奇奇,奇偶,偶奇,偶偶,直接分情况维护最大值就好了

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
using namespace std;typedef long long LL;typedef unsigned long long ull;const LL inf=0x3f3f3f3f3f3f3f3f;const int N=1e5+100;struct Node
{int l,r;LL oo,jj,oj,jo;
}tree[N<<2];void pushup(int k)
{Node &a=tree[k<<1],&b=tree[k<<1|1];tree[k].jj=max(max(a.jj,b.jj),max(a.jj+b.oj,a.jo+b.jj));tree[k].oo=max(max(a.oo,b.oo),max(a.oo+b.jo,a.oj+b.oo));tree[k].jo=max(max(a.jo,b.jo),max(a.jj+b.oo,a.jo+b.jo));tree[k].oj=max(max(a.oj,b.oj),max(a.oo+b.jj,a.oj+b.oj));
}void init(int k,LL val,int pos)
{tree[k].oo=tree[k].jj=tree[k].oj=tree[k].jo=-inf;if(pos&1)tree[k].jj=val;elsetree[k].oo=val;
}void build(int k,int l,int r)
{tree[k].l=l;tree[k].r=r;if(l==r){LL val;scanf("%lld",&val);init(k,val,l);return;}int mid=l+r>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);pushup(k);
}void change(int k,int pos,LL val)
{if(tree[k].l==tree[k].r){init(k,val,tree[k].l);return;}int mid=tree[k].l+tree[k].r>>1;if(pos<=mid)change(k<<1,pos,val);elsechange(k<<1|1,pos,val);pushup(k);
}Node query(int k,int l,int r)
{if(tree[k].l>=l&&tree[k].r<=r)return tree[k];int mid=tree[k].l+tree[k].r>>1;if(r<=mid)return query(k<<1,l,r);else if(l>mid)return query(k<<1|1,l,r);else{Node a=query(k<<1,l,r),b=query(k<<1|1,l,r),ans;ans.jj=max(max(a.jj,b.jj),max(a.jj+b.oj,a.jo+b.jj));ans.oo=max(max(a.oo,b.oo),max(a.oo+b.jo,a.oj+b.oo));ans.jo=max(max(a.jo,b.jo),max(a.jj+b.oo,a.jo+b.jo));ans.oj=max(max(a.oj,b.oj),max(a.oo+b.jj,a.oj+b.oj));return ans;}
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){int n,m;scanf("%d%d",&n,&m);build(1,1,n);while(m--){int op;scanf("%d",&op);if(op==1){int pos;LL val;scanf("%d%lld",&pos,&val);change(1,pos,val);}else if(op==0){int l,r;scanf("%d%d",&l,&r);Node t=query(1,l,r);printf("%lld\n",max(max(t.jj,t.oo),max(t.oj,t.jo)));}}}return 0;
}

HDU - 5316 Magician(线段树区间合并)相关推荐

  1. HDU - 3667 Hotel(线段树+区间合并)

    题目链接:点击查看 题目大意:给出n个连续的空房间,依次进行m个操作,操作一是查询操作,查询在总区间内的一段连续的长度为x的空房间,并 且该位置要靠左,如果查询到返回最左边的端点,并将其占用,找不到返 ...

  2. hdu 3308 LCIS 线段树 + 区间合并

    传送门 文章目录 题意: 思路: 题意: 思路: 日常水一篇题解. 带修改的求区间连续的递增序列,我们考虑用线段树维护. 直接维护mlenmlenmlen是区间最长的递增序列,lslsls是从左端点开 ...

  3. hdu.3308 LCIS(线段树,区间合并+单点更新)

    按照傻崽大神的线段树修炼路线,自己做的第二道区间合并的题. 问题比较简单明了,区间求最长连续上升子序列,但是是需要单点更新的 n个数, m组操作 Q A B 询问[A,B]区间的最长连续上升子序列: ...

  4. Tunnel Warfare(HDU1540+线段树+区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540 题目: 题意:总共有n个村庄,有q次操作,每次操作分为摧毁一座村庄,修复一座村庄,和查询与询问的 ...

  5. HDU3308 线段树区间合并

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

  6. 树链剖分——线段树区间合并bzoj染色

    线段树区间合并就挺麻烦了,再套个树链就更加鬼畜,不过除了代码量大就没什么其他的了.. 一些细节:线段树每个结点用结构体保存,pushup等合并函数改成返回一个结构体,这样好写一些 struct Seg ...

  7. SPOJ GSS3-Can you answer these queries III-分治+线段树区间合并

    Can you answer these queries III SPOJ - GSS3 这道题和洛谷的小白逛公园一样的题目. 传送门: 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间 ...

  8. CodeForces - 1539F Strange Array(线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,规定位置 iii 的贡献是:设 x=a[i]x=a[i]x=a[i],选择一个包含 iii 的区间 [l,r][l,r][l,r],将其中 ...

  9. 牛客 - 求函数(线段树+区间合并/线段树+矩阵维护)

    题目链接:点击查看 题目大意:现在有 n 个函数,每个函数都是诸如 f( x ) = k * x + b 的形式,只是每个函数的 k 和 b 都是相互独立的,现在给出两个操作: 1 pos k b:将 ...

最新文章

  1. Xilinx IP核之FIFO
  2. LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别
  3. 频繁项集-------产生强关联规则的过程
  4. jQuery基础学习笔记(下)
  5. 基础编程题目集 7-3 逆序的三位数 (10 分)
  6. javaScript = == ===的区别
  7. python锁机制_Python并发编程之谈谈线程中的“锁机制”(三)
  8. 【转】Perl、PHP、Python、Java和Ruby的比较
  9. 机器人动力学方程——拉格朗日法
  10. 糖葫芦低通滤波器的设计
  11. 2021年N1叉车司机复审考试及N1叉车司机模拟试题
  12. 第2篇,到底什么是互联网思维?
  13. 案例:通过空气质量指数AQI学习统计分析并进行预测(上)
  14. 取整取余(模)知多少?
  15. Camera,音频录制与Vitamio框架
  16. 上马”纯视觉L2/L2+级ADAS方案,特斯拉并非第一家
  17. rigol 普源MSO5104数字示波器技术参数
  18. 酒店无线覆盖-工业级无线AP
  19. PTA 二维数组与字符数组 7-6 IP地址转换
  20. 三年级乘法计算机应用题目,三年级数学加减计算题大全

热门文章

  1. 单片机设置12分频c语言,AT89C51单片机,如何实现延迟一秒
  2. c语言程序设计B试题,c语言程序设计期末试题B(含答案)Word版
  3. 微信摇一摇插件ios_iOS实现微信摇一摇功能
  4. 高仿真的类-单例工厂的顶层设计
  5. maven的java工程取mysql数据库数据
  6. 使用Properties集合存储数据,遍历取出Properties集合中的数据
  7. 数据库-优化-慢查日志的存储格式
  8. 解决2次查询User的问题(ThreadLocal)
  9. 函数作为返回值练习 作用域和作用域链及预解析 闭包 闭包小案例
  10. ElasticSearch(一)基础知识