【BZOJ4991】我也不知道题目名字是什么(线段树)

题面

BZOJ

题解

对于线段树维护的区间维护以下东西:

区间左(右)端开始(结束)的最长(短)子串的长度

左端右端的值,以及当前区间内的答案

每次向上合并只需要分类讨论即可

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MAX 55000
#define lson (now<<1)
#define rson (now<<1|1)
inline int read()
{RG int x=0,t=1;RG char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-')t=-1,ch=getchar();while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();return x*t;
}
int n;
struct Node
{int l,r;int lv,rv;int ls,rs,ms;int lj,rj,mj;
}t[MAX<<2];
Node operator+(Node a,Node b)
{Node c;c.l=a.l;c.r=b.r;c.lv=a.lv;c.rv=b.rv;c.ls=a.ls;c.rs=b.rs;if(a.ls==a.r-a.l+1&&a.rv<=b.lv)c.ls+=b.ls;if(b.rs==b.r-b.l+1&&a.rv<=b.lv)c.rs+=a.rs;c.ms=max(a.ms,b.ms);c.ms=max(c.ms,max(c.ls,c.rs));if(a.rv<=b.lv)c.ms=max(c.ms,a.rs+b.ls);c.lj=a.lj;c.rj=b.rj;if(a.lj==a.r-a.l+1&&a.rv>=b.lv)c.lj+=b.lj;if(b.rj==b.r-b.l+1&&a.rv>=b.lv)c.rj+=a.rj;c.mj=max(a.mj,b.mj);c.mj=max(c.mj,max(c.lj,c.rj));if(a.rv>=b.lv)c.mj=max(c.mj,a.rj+b.lj);return c;
}
void Build(int now,int l,int r)
{t[now].l=l;t[now].r=r;if(l==r){t[now].lv=t[now].rv=read();t[now].mj=t[now].lj=t[now].rj=1;t[now].ms=t[now].ls=t[now].rs=1;return;}int mid=(l+r)>>1;Build(lson,l,mid);Build(rson,mid+1,r);t[now]=t[lson]+t[rson];
}
Node Query(int now,int l,int r,int L,int R)
{if(L==l&&r==R)return t[now];int mid=(l+r)>>1;if(R<=mid)return Query(lson,l,mid,L,R);if(L>mid)return Query(rson,mid+1,r,L,R);return Query(lson,l,mid,L,mid)+Query(rson,mid+1,r,mid+1,R);
}
int main()
{n=read();Build(1,1,n);int m=read();while(m--){int l=read(),r=read();Node ans=Query(1,1,n,l,r);printf("%d\n",max(ans.ms,ans.mj));}return 0;
}

转载于:https://www.cnblogs.com/cjyyb/p/8557256.html

【BZOJ4991】我也不知道题目名字是什么(线段树)相关推荐

  1. [BZOJ]4491: 我也不知道题目名字是什么 线段树(差分)

    Description 给定一个序列A[i],每次询问l,r,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串 这道题目有两个思路:1.对原序列差分,转化为经典问题.2.线段树维护6个东西, ...

  2. bzoj 4491: 我也不知道题目名字是什么(线段树区间和并)

    4491: 我知道题目名字是什么 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 347  Solved: 196 [Submit][Status][ ...

  3. P4770-[NOI2018]你的名字【SAM,线段树合并】

    正题 题目链接:https://www.luogu.com.cn/problem/P4770 题目大意 给出一个长度为nnn的字符串SSS.qqq次询问给出一个串TTT和一个区间[L,R][L,R][ ...

  4. BZOJ4491: 我也不知道题目名字是什么

    [传送门:BZOJ4491] 简要题意: 给出一个长度为n的序列,m个操作,每个操作输入x,y,求出第x个数到第y个数的最长子串,保证这个最长子串是不上升或不下降子串 题解: 线段树 因为不上升或不下 ...

  5. 题目敌兵布阵-------线段树(单点修改查询,区间修改查询)

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  6. 【转】线段树题目 汇总 讲解(by not only success)

    转载自:http://www.notonlysuccess.com/ 非常喜欢他的代码风格以及简洁的思路,感谢notonlysuccess! PS:他的个人网站好像是上不去了-.- 线段树 很早前写的 ...

  7. hdu4973 线段树(题目不错,用了点,段,更新查找还有DFS)

    题意:       给你一个初始序列,初始序列长度n,分别为1 2 3 4 5 ....n,有两种操作 (1)D l r 把l_r之间的数据都复制一遍 1 2 3 4 5 6 D 2 4 = 1 2 ...

  8. UOJ #395 BZOJ 5417 Luogu P4770 [NOI2018]你的名字 (后缀自动机、线段树合并)

    NOI2019考前做NOI2018题.. 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=5417 (luogu) http ...

  9. 【转载】线段树题目2

    1.hdu1166 敌兵布阵 更新节点,区间求和. 2.hdu1754 I Hate It 更新节点,区间最值. . 3.hdu1698 Just a Hook 成段更新,总区间求和. . 4.hdu ...

最新文章

  1. SAP RETAIL 商品主数据里的X-DChain Status字段
  2. 排序算法 —— 归并排序
  3. python基础语法-三大内建数据结构之列表(list)
  4. 【Java多线程】实现Runnable接口方式 / 继承Thread类方式;使用synchronized锁实现线程安全;线程安全的懒汉式单例模式;死锁问题示例
  5. 车载电脑中控软件_ 车载手机支架怎么选?教你3招,开车的时候方便快捷
  6. 【HDU - 5014】Number Sequence(贪心构造)
  7. JAVA进阶教学之(IO流)
  8. 小A点菜(洛谷-P1164)
  9. Redis系列-主从复制配置
  10. openGauss训练营第二期结营!一百个QA和PPT合辑大放送!随附105人结营学员名单...
  11. 页面动态加载android,Android APP启动页面动态加载全部权限
  12. 【图像压缩】基于matlab GUI DCT图像压缩(压缩率可调)【含Matlab源码 1049期】
  13. 取消参考文献自动编号_参考文献的自动编号及引用
  14. python系列之supervisor进程管理
  15. 普罗米修斯 Prometheus
  16. Oracle怎样创建共享文件夹,OracleVirtualBox虚拟机如何实现文件夹共享
  17. OSPF路由器类型 ABR与ASBR路由聚合区别
  18. 服务器白屏维修,液晶屏故障汇总及检修方法之一(白屏)
  19. Angular学习笔记之慕课大漠穷秋塞主讲
  20. php 导出多个excel并输出压缩文件

热门文章

  1. Windows中使用包管理器(类似于apt/yum的) - Chocolatey
  2. pandas apply lambda_一分钟一个Pandas小技巧(二)
  3. 在php中默认访问权限修饰符是,php中访问修饰符的知识点总结
  4. android 笔记本推荐 2015年,IDC:Android平板份额2015年将超iPad
  5. 不属于ipo模型的 python_python ipo模型是指什么?_后端开发
  6. Spark On Hive配置
  7. [NLP]OpenNLP Maven工程的依赖
  8. C#.NET 通用权限管理系统中的数据集权限设置实现参考界面(商业化成熟权限管理系统,提供全部源码)...
  9. Docker之使用Dockerfile创建定制化镜像(四)--技术流ken
  10. spring boot(三) 集成mybatis