给定一个序列A[i],每次询问l,r,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串
【bzoj4491】【我也不知道题目名字是什么】【线段树】
发布日期:2021-11-16 15:38:42
浏览次数:11
分类:技术文章
本文共 1475 字,大约阅读时间需要 4 分钟。
Description
Input
第一行n,表示A数组有多少元素
接下来一行为n个整数A[i] 接下来一个整数Q,表示询问数量 接下来Q行,每行2个整数l,rOutput
对于每个询问,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串
Sample Input
9
1 2 3 4 5 6 5 4 3
5
1 6
1 7
2 7
1 9
5 9
1 2 3 4 5 6 5 4 3
5
1 6
1 7
2 7
1 9
5 9
Sample Output
6
6
5
6
4
样例解释
五个询问分别对应
[1,6][1,6][2,6][1,6][6,9]
6
5
6
4
样例解释
五个询问分别对应
[1,6][1,6][2,6][1,6][6,9]
HINT
N,Q<=50000
题解:线段树维护左边上升,下降,权值和右边上升,下降,权值以及区间长,最大值即可。
代码:
#include#include #include #define N 50010using namespace std;struct use{int lup,rup,ldown,rdown,lv,rv,len,mxup,mxdown;}t[N<<2];int n,x,y,a[N],q;use update(use a,use b){ use c; c.len=a.len+b.len; c.lv=a.lv;c.rv=b.rv; c.lup=a.lup; if (a.lup==a.len&&a.rv<=b.lv) c.lup=a.len+b.lup; c.ldown=a.ldown; if (a.ldown==a.len&&a.rv>=b.lv) c.ldown=a.len+b.ldown; c.rup=b.rup; if (b.rup==b.len&&b.lv>=a.rv) c.rup=b.len+a.rup; c.rdown=b.rdown; if (b.rdown==b.len&&b.lv<=a.rv) c.rdown=b.len+a.rdown; c.mxup=max(a.mxup,b.mxup); if (a.rv<=b.lv) c.mxup=max(c.mxup,a.rup+b.lup); c.mxdown=max(a.mxdown,b.mxdown); if (a.rv>=b.lv) c.mxdown=max(c.mxdown,a.rdown+b.ldown); return c;}void build(int k,int l,int r){ int mid=(l+r)>>1; if (l==r){ t[k].lv=t[k].rv=a[l]; t[k].lup=t[k].rup=t[k].ldown=t[k].rdown=t[k].len=t[k].mxup=t[k].mxdown=1; return; } build(k<<1,l,mid); build(k<<1|1,mid+1,r); t[k]=update(t[k<<1],t[k<<1|1]);}use query(int k,int l,int r,int ll,int rr){ if (l==ll&&r==rr){return t[k];} int mid=(l+r)>>1; if (rr<=mid) return query(k<<1,l,mid,ll,rr); else if (mid
转载地址:https://blog.csdn.net/sunshinezff/article/details/51078316 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年03月31日 16时45分43秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
python里使用正则表达式来替换匹配成功的组并输出替换的次数
2019-04-28
python里使用difflib库的Differ来比较文本
2019-04-28
游戏制作之路(32)创建自定义的界面样式管理
2019-04-28
从小说里学会长大
2019-04-28
数字电路(8)触发器(二)
2019-04-28
数字电路(9)触发器(三)
2019-04-28
数字电路(4)门电路(三)
2019-04-28
数字电路(10)可编程逻辑器件分类
2019-04-28
记录一些自己常用的网站,持续更新
2019-04-28
CAN总线入门(硬件部分)
2019-04-28
电子设计(5)MOS管防电源反接电路
2019-04-28
PCB设计中的20个规则!
2019-04-28
电子设计(6)双电源自动切换电路
2019-04-28
电子设计(7)3.3V和5V串口通信电平转换电路(超详细,超简单)
2019-04-28
「数字电路系列」博文目录,学习总结
2019-04-28
电容实际等效模型(容抗、感抗、品质因数Q)
2019-04-28
盲孔、埋孔、通孔、一阶HDI、二阶HDI概念
2019-04-28
3分钟了解硬件产品设计流程
2019-04-28
【MOS管知识汇总】分类、区分、寄生二极管、导通条件、开关电路、串联电阻
2019-04-28
疫情期间,天天对着你“开枪”的额温枪,你知道它的工作原理吗?
2019-04-28