题目描述

大家都知道在文理分科的时候总是让人纠结的,纠结的当然不只是自己。

比如 YSY 就去读了文科, LWD 知道了很气。

于是他就去卡了 BZOJ 测评机, 晚上他做了一个谜一样的梦,自己在一座全是 YSY 的分科岛。这里有 YSY 草, YSY 花, YSY 糖……每个 YSY 都有一个美( Ti)丽( Zhong)值。

当然没有小于零的体重啦!LWD 于是不惜重金卖肉想买下这座岛,可是分科岛的岛主,是一位忠实的区间问题爱好者。

他想把小岛传给一个谜一样的爱好者,所以岛主给了 LWD 一个终极挑战——选出一片区域中最美丽的 YSY。

可是岛主的审美观不像 YYR那么专一,他有时喜欢现代美——最轻的,有时喜欢唐代美——最重的。

这让被欢喜冲昏了头脑(血液集中在下半身)的 LWD十分苦恼。

他要在规定时间内完成挑战赢得买岛的权利,于是只有求助 DalaoYYR,可是 YYR 要准备课件啊。

只有比 YYR 弱很多的你能够帮他了。挑战内容如下岛主将把 N 个 YSY 摆成一个条形,并给出所有 YSY 的美丽值。

挑出多少个就要看岛主心情了,他觉得 LWD 是条汉子就会给出很多很多的 YSY 满足他。岛主将给出 Q 个考验,

询问内容是在给定区间内求出最美丽的 YSY。你已经了解规则了,开始你的表演吧!

Input

第一行为一个整数 \(N\),表示岛主摆出了 \(N\) 个 YSY。

接下来一行$ N$ 个整数,表示每个 YSY 的美丽值(单位:kg),因为 YSY 整体很美所以 YSY

不会超过 \(10^9\)kg。

接下来一行一个整数 Q,表示岛主有 Q 个考验。\(Q<=1500000\)

接下来 Q 行,每行三个整数 opt, l, r 。

opt 等于 1 时表示岛主那时喜欢现代美,等于 2时代表岛主那时喜欢唐代美。

询问最美计划在区间[l, r]中进行

\(100\%\)的数据 \(N<= 3000000\), 美丽值不会超过 \(10^{9}\)

数据量巨大,请优化读入

Output

包括一个非负整数,表示有多少种放置的方案.

Sample Input

5 5
1 2 3 4 5
1 1 2
2 1 3
1 2 5
2 4 5
2 1 5

Sample Output

1
3
2
5
5

没错,笛卡尔树可以用来解\(RMG\)问题,我们对于每次查询区间进行离线。

首先,我们可以根据最大或最小建出大根堆或者是小根堆,

一个区间的最值就是其左右端点\(lca\)的值,利用离线\(lca\)我们可以做到时间复杂度为\(O(n*\alpha_n)\)的优秀复杂度。

此题严重卡常!!!!

代码如下:

#include <bits/stdc++.h>using namespace std;#define reg register
#define rep(a,b,c) for(reg int a=(b),a##_end_=(c); a<=a##_end_; ++a)
#define erep(i,x) for(int i=Head[x]; i; i=Nxt[i])char U[20000],*p1=U,*p2=U;
inline int Read(void) {register int res=0;register char c;while(c=(p1==p2&&(p2=(p1=U)+fread(U,1,20000,stdin),p1==p2)?EOF:*p1++),c<48||c>57);do res=(res<<3)+(res<<1)+(c^48);while(c=(p1==p2&&(p2=(p1=U)+fread(U,1,20000,stdin),p1==p2)?EOF:*p1++),c>=48&&c<=57);return res;
}const int N=3e6+5,M=1500005,mod=1e9+7;int n,q,stk[N],A[N],Ans[M],Tot,Head[N],to[N],Nxt[N],cost[N],lc[N],rc[N],Fa[N],mark[N];struct query {int op,L,R;
} B[N];inline void AddEdgepair(int a,int b,int c) {to[++Tot]=b,cost[Tot]=c,Nxt[Tot]=Head[a],Head[a]=Tot;to[++Tot]=a,cost[Tot]=c,Nxt[Tot]=Head[b],Head[b]=Tot;
}int find(int x) {return x==Fa[x]?Fa[x]:Fa[x]=find(Fa[x]);
}void dfs(int x) {mark[x]=1;if(lc[x])dfs(lc[x]),Fa[lc[x]]=x;if(rc[x])dfs(rc[x]),Fa[rc[x]]=x;erep(i,x) {int y=to[i],Id=cost[i];if(mark[y])Ans[Id]=find(y);}
}char buff[20000000],*iter=buff,Stk[15];void _main(void) {n=Read(),q=Read();rep(i,1,n)A[i]=Read();int tot=0;rep(i,1,q)B[i].op=Read(),B[i].L=Read(),B[i].R=Read();int top=0,root=0;stk[top=1]=root=1;rep(i,2,n) {int x=0;while(top&&A[stk[top]]>=A[i])x=stk[top--];!top?root=i,lc[i]=x:lc[i]=x,rc[stk[top]]=i;stk[++top]=i;}while(top>1)rc[stk[top-1]]=stk[top],top--;rep(i,1,q)if(B[i].op==1)AddEdgepair(B[i].L,B[i].R,i);rep(i,1,n)Fa[i]=i;dfs(root);Tot=0;rep(i,1,n)Fa[i]=i,lc[i]=rc[i]=mark[i]=Head[i]=0;stk[top=1]=root=1;rep(i,2,n) {int x=0;while(top&&A[stk[top]]<=A[i])x=stk[top--];!top?root=i,lc[i]=x:lc[i]=x,rc[stk[top]]=i;stk[++top]=i;}while(top>1)rc[stk[top-1]]=stk[top],top--;rep(i,1,q)if(B[i].op==2)AddEdgepair(B[i].L,B[i].R,i);dfs(root);rep(i,1,q) {int X=A[Ans[i]];if(!X)*iter++='0';else {int O=0;for(; X;)Stk[++O]=(X%10)^48,X/=10;for(; O;)*iter++=Stk[O--];}*iter++='\n';}fwrite(buff,1,iter-buff,stdout);
}signed main() {_main();return 0;
}

转载于:https://www.cnblogs.com/dsjkafdsaf/p/11503415.html

[BZOJ5042]LWD的分科岛相关推荐

  1. bzoj5042: LWD的分科岛 两种做法

    Description 大家都知道在文理分科的时候总是让人纠结的,纠结的当然不只是自己.比如 YSY 就去读了文科, LWD 知道了很 气.于是他就去卡了 BZOJ 测评机, 晚上他做了一个谜一样的梦 ...

  2. BZOJ5042: LWD的分科岛

    [传送门:BZOJ5042] 简要题意: 给出n个数,q个询问,每个询问输入opt,l,r,如果opt=1,则输出l到r中的最小值,否则输出最大值 题解: 直接上ST表,自信一波,结果 MLE??好吧 ...

  3. [bzoj5042][笛卡尔树]LWD的分科岛

    Description 大家都知道在文理分科的时候总是让人纠结的,纠结的当然不只是自己.比如 YSY 就去读了文科, LWD 知道了很 气.于是他就去卡了 BZOJ 测评机, 晚上他做了一个谜一样的梦 ...

  4. [BZOJ]5042: LWD的分科岛 笛卡尔树+LCA

    Description 大家都知道在文理分科的时候总是让人纠结的,纠结的当然不只是自己.比如 YSY 就去读了文科, LWD 知道了很气.于是他就去卡了 BZOJ 测评机, 晚上他做了一个谜一样的梦, ...

  5. [bzoj 5042]LWD的分科岛

    要求用优秀的复杂度求静态RMQ 这道题首先肯定不能带log,那可以考虑离线做,让询问右端点递增. 枚举右端点,用并查集fa[i]表示i~r的极值所在的位置,然后发现每次需要改变的位置可以用单调栈来计算 ...

  6. [C] 深度优先搜索解决连通块/染色问题——求岛的个数

    本文介绍用DFS解决连通块个数问题 有关dfs的介绍见另外一篇:不撞南墙不回头--深度优先搜索 例题 宝岛探险 题目描述 一个小岛由一个主岛和一些复附属岛屿组成,该岛使用一个二维矩阵表示,其中数字表示 ...

  7. AJAX学习基础:简单介绍数据岛使用方法

        数据岛指的是存在Html网页中的xml代码段,它在Html中形成了一个数据的集合,数据岛允许我们在Html网页中集成xml, 对xml编写脚本.     数据岛有它特有的形式,由标记xml开始 ...

  8. 两个程序员的泰国普吉岛之行

    十一长假后,我和女朋友一起去了普吉岛游玩(作为两个程序员,不能每天敲代码,也应该放松下自己),玩的很Happy,也是我们第一次出国,所以更带有许多兴奋.也许是由于玩的太High,导致回家后的第二天,就 ...

  9. luogu P3393 逃离僵尸岛(点权最短路 + 多源BFS)

    P3393 逃离僵尸岛 最短路,有点的不能到达我们就直接把他的权值赋值为INF即可. bfs预处理一下每个点的危险程度. 因为这里没有边权是点权,我们可以把边权转化为两端点的权值和,或者直接跑点权最短 ...

最新文章

  1. java简述什么是标识符_Java概述(标识符、变量、基本数据类型)
  2. Spark修炼之道(高级篇)——Spark源码阅读:第六节 Task提交
  3. 集成开放平台标准化连接器之基于OAS3.0的API管理能力
  4. python安全攻防---信息收集---whois查询
  5. [LUOGU] P2024 食物链
  6. js parseInt()和Number()区别
  7. mysql的sql经典写法收录
  8. aws linux 安装图形,linux – 用于安装AWS CLI工具的Bash脚本
  9. Java 范例 - 线程
  10. 移动端-项目基础总结------彭记(020)
  11. 语义slam_【语义SLAM】MIT 新开源语义VIOSLAM框架 kimera
  12. 十大免费网络工具 瞬间提升业务效率
  13. (转)高德百度坐标系转换方法
  14. LeetCode 592
  15. Python获取金山词霸每日一句
  16. js获取前后三个月的时间戳
  17. 华为eNSP模拟器操作技巧之关闭信息提示
  18. 乘员舱热舒适度和车辆能量管理云技术研讨会圆满结束!
  19. 3G网络实际使用测试情况
  20. zbb20180619 mysql windows环境下MySQL重启的命令行说明

热门文章

  1. 数字中国万里行:腾讯@天津
  2. Javascript通过元素id和name直接获取元素
  3. 以太坊下载地址及相关文档
  4. 【opencv学习笔记】003之图像像素基本操作(获取像素指针、范围处理)及掩膜操作(filter2D)详解
  5. C++生产流水线的自动设计器(编译原理NFA-DFA)
  6. 联想Tab P11 Pro 、Tab M10 HD 对标iPad Pro
  7. 蚌埠市商标代办机构服务流程以及时间介绍
  8. 疫情危机下,欧洲风投青睐的初创趋势
  9. C++音视频开发核心知识,小白入门必看基础知识
  10. 李宏毅深度强化学习(国语)课程(2018) 笔记(八)Imitation Learning