[gym102412D]The Jump from Height of Self-importance to Height of IQ Level
考虑使用平衡树维护该序列,操作显然可以用fhq treap的分裂+合并来实现
进一步的,问题即变为维护哪些信息来支持push up的操作(并判定是否存在$a_{i}<a_{j}<a_{k}$),容易想到去维护区间最大值/最小值、最大的$a_{i}$/最小的$a_{j}$满足存在$a_{i}<a_{j}$、内部是否存在$a_{i}<a_{j}<a_{k}$
第一和三个信息都可以轻松的合并,而第二个信息合并时要找到左侧右侧最大值的前驱,显然并不能维护
若已经存在$a_{i}<a_{j}<a_{k}$时,该信息可以不维护;若不存在$a_{i}<a_{j}<a_{k}$时,左侧比右侧最大值小的数必然构成一个递减序列,其中最大的(前驱)即是最靠左的,以此查询即可
单次合并为$o(\log n)$,那么平衡树的复杂度即为$o(\log^{2}n)$
时间复杂度为$o(n\log^{2}n+q\log^{2}n)$,可以通过

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 120005
4 int n,m,rt,l,r,x,val[N],sz[N],rnd[N],mx[N],mn[N],vis[N],Mx[N],Mn[N],ch[N][2];
5 int query_pre(int k,int x){
6 if (!k)return 0;
7 if (mn[ch[k][0]]<x)return query_pre(ch[k][0],x);
8 if (val[k]<x)return val[k];
9 return query_pre(ch[k][1],x);
10 }
11 int query_nex(int k,int x){
12 if (!k)return n+1;
13 if (mx[ch[k][1]]>x)return query_nex(ch[k][1],x);
14 if (val[k]>x)return val[k];
15 return query_nex(ch[k][0],x);
16 }
17 void up(int k){
18 sz[k]=sz[ch[k][0]]+sz[ch[k][1]]+1;
19 mx[k]=max(max(mx[ch[k][0]],val[k]),mx[ch[k][1]]);
20 mn[k]=min(min(mn[ch[k][0]],val[k]),mn[ch[k][1]]);
21 vis[k]=(vis[ch[k][0]]|vis[ch[k][1]]);
22 vis[k]|=(Mn[ch[k][0]]<max(val[k],mx[ch[k][1]]));
23 vis[k]|=(min(val[k],mn[ch[k][0]])<Mx[ch[k][1]]);
24 vis[k]|=((mn[ch[k][0]]<val[k])&&(val[k]<mx[ch[k][1]]));
25 if (vis[k])return;
26 Mx[k]=max(Mx[ch[k][0]],Mx[ch[k][1]]);
27 Mx[k]=max(Mx[k],query_pre(ch[k][0],max(val[k],mx[ch[k][1]])));
28 if (val[k]<mx[ch[k][1]])Mx[k]=max(Mx[k],val[k]);
29 Mn[k]=min(Mn[ch[k][0]],Mn[ch[k][1]]);
30 Mn[k]=min(Mn[k],query_nex(ch[k][1],min(val[k],mn[ch[k][0]])));
31 if (mn[ch[k][0]]<val[k])Mn[k]=min(Mn[k],val[k]);
32 }
33 int merge(int x,int y){
34 if ((!x)||(!y))return x+y;
35 int k;
36 if (rnd[x]<rnd[y]){
37 k=x;
38 ch[k][1]=merge(ch[k][1],y);
39 }
40 else{
41 k=y;
42 ch[k][0]=merge(x,ch[k][0]);
43 }
44 up(k);
45 return k;
46 }
47 void split(int k,int &x,int &y,int z){
48 if (!k){
49 x=y=0;
50 return;
51 }
52 if (z<=sz[ch[k][0]]){
53 y=k;
54 split(ch[k][0],x,ch[y][0],z);
55 up(y);
56 }
57 else{
58 x=k;
59 split(ch[k][1],ch[x][1],y,z-sz[ch[k][0]]-1);
60 up(x);
61 }
62 }
63 int main(){
64 srand(time(0));
65 scanf("%d",&n);
66 memset(mn,0x3f,sizeof(mn));
67 memset(Mn,0x3f,sizeof(Mn));
68 for(int i=1;i<=n;i++){
69 scanf("%d",&val[i]);
70 sz[i]=1,rnd[i]=rand(),mx[i]=mn[i]=val[i];
71 rt=merge(rt,i);
72 }
73 scanf("%d",&m);
74 for(int i=1;i<=m;i++){
75 scanf("%d%d%d",&l,&r,&x);
76 int rtl,rtr,rt1,rt2;
77 split(rt,rtl,rt,l-1),split(rt,rt,rtr,r-l+1);
78 split(rt,rt1,rt2,(r-l+1)-x),rt=merge(rt2,rt1);
79 rt=merge(merge(rtl,rt),rtr);
80 if (vis[rt])printf("YES\n");
81 else printf("NO\n");
82 }
83 return 0;
84 }
[gym102412D]The Jump from Height of Self-importance to Height of IQ Level的更多相关文章
- [页面滚动到底部]jquery $(window).height()取值等于$(document).height()的问题
问题现象:JSP中头部引用了某个head.jsp,在videoList.jsp中生成片段时如下 实际最终生成的HTML如下: <!DOCTYPE html>没有解析到,原因找到了,先想办法 ...
- height:100% 布局
常常会碰到需要填满整个浏览器,并且自适应高度的需求.首先肯定会想到给容器设定height:100%,但是会没有效果.原因是body没有高度,所以百分比无法生效. 解决方案:给html,body,标签都 ...
- height与line-height的深入理解及应用
转载:原文地址:http://www.zhangxinxu.com/wordpress/?p=384 一.前言 前两天在腾讯ISD团队博客上看到一篇翻译的文章"深入理解css 行高" ...
- (document).height()、$(document).scrollTop()
(document).height().$(document).scrollTop(),有需要的朋友可以参考下. jQuery(window).height()代表了当前可见区域的大小,而jQuery ...
- 解决在onCreate()过程中获取View的width和Height为0的4种方法
很经常当我们动态创建某些View时,需要通过获取他们的width和height来确定别的view的布局,但是在onCreate()获取view的width和height会得到0.view.getWid ...
- 25.按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个属性:矩形的宽width;矩形的高height。 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化; 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10。 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有
package zhongqiuzuoye; //自己写的方法 public class Rect { public double width; public double height; Rect( ...
- 按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个属性:矩形的宽width;矩形的高height。 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化; 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10。 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有确定位
package com.hanqi.test; public class Rect { ; ; public double getWidth() { return width; } public vo ...
- 按要求编写Java应用程序: (1)编写西游记人物类(XiYouJiRenWu) 其中属性有:身高(height),名字(name),武器(weapon) 方法有:显示名字(printName),显示武器(printWeapon) (2)在主类的main方法中创建二个对象:zhuBaJie,sunWuKong。并分别为他 们的两个属性(name,weapon)赋值,最后分别调用printName,
package com.hanqi.test; public class xiyoujirenwu { private double height;// 身高 private String name; ...
- height:100%不起作用(无效),div全屏
当父容器是body时,height:100%不起作用(无效),解决办法:在css代码段中添加 html, body{ margin:0; height:100%; } 实现div全屏的时候需要上面那段 ...
随机推荐
- 十一、Abp vNext 基础篇丨测试
前言 祝大家国庆快乐,本来想国庆之前更新完的,结果没写完,今天把剩下的代码补了一下总算ok了. 本章节也是我们后端日常开发中最重要的一步就是测试,我们经常听到的单元测试.集成测试.UI测试.系统测试, ...
- 10.12 LNMP
yum install nginx php php-fpm mariadb-server php-mysql php.conf server { listen 8000; # pass the PHP ...
- Python - __all__ 变量
import * 当我们向文件导入某个模块时,导入的是该模块中那些名称不以下划线(单下划线 _ 或者双下划线 __ )开头的变量.函数和类 因此,如果不想模块文件中的某个对象被引入到其它文件中使用,可 ...
- vue 中级基础考察面试题
vue 生命周期有哪些 beforeCreate created beforeMount mounted beforeUpdate updated activated deactivated befo ...
- 题解 CF736D Permutations
link Description 现在,你有一个二分图,点数为 \(2n\). 已知这个二分图的完备匹配的个数是奇数. 现在你要知道,删除每条边后,完备匹配个数是奇数还是偶数. \(1\le n\le ...
- Oracle12C安装教程
准备工作 网盘链接: https://pan.baidu.com/s/1gffHbOjImk1SfezdWO2Bpw 提取码: imft Oracle12C的安装 1.分别解压"winx64 ...
- 痞子衡嵌入式:超级下载算法RT-UFL v1.0在恩智浦MCUXpresso IDE下的使用
痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个 ...
- verilog specify
specify block用来描述从源点(source:input/inout port)到终点(destination:output/inout port)的路径延时(path delay),由sp ...
- AIApe问答机器人Scrum Meeting 5.3
Scrum Meeting 6 日期:2021年5月3日 会议主要内容概述:汇报两日工作. 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 李明昕 后端 与前端对 ...
- Seata整合SpringBoot和Mybatis
Seata整合SpringBoot和Mybatis 一.背景 二.实现功能 三.每个服务使用到的技术 1.账户服务 2.订单服务 四.服务实现 1.账户服务实现 1.引入jar包 2.项目配置 3.建 ...