线段树经典应用2

参考代码:

https://vjudge.net/problem/CodeForces-484E#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
const int maxn=1e5+10;
struct node
{int s[2];int lmx,rmx,f,len;
};
int rt[maxn],n;
struct sgt_tree
{#define ls (t[u].s[0])#define rs (t[u].s[1])int tot=0;node t[maxn*40];int build(int l,int r){int u=++tot;if(l==r){t[u].lmx=t[u].rmx=t[u].f=0;t[u].len=1;return u;}int mid=(l+r)/2;t[u].s[0]=build(l,mid);t[u].s[1]=build(mid+1,r);pushup(u,l,r);return u;}void pushup(int u,int l,int r){t[u].len=t[ls].len+t[rs].len;int mid=(l+r)>>1;if(t[ls].f==(mid-l+1))t[u].lmx=t[ls].f+t[rs].lmx;else t[u].lmx=t[ls].lmx;if(t[rs].f==(r-mid))t[u].rmx=t[rs].f+t[ls].rmx;else t[u].rmx=t[rs].rmx;t[u].f=max(max(t[ls].f,t[rs].f),t[ls].rmx+t[rs].lmx);}int insert(int oldrt,int l,int r,int pos){int u=++tot;t[u]=t[oldrt];if(l==r){t[u].lmx=t[u].rmx=t[u].f=1;t[u].len=1;return u;}int mid=(l+r)>>1;if(pos<=mid)t[u].s[0]=insert(t[oldrt].s[0],l,mid,pos);else t[u].s[1]=insert(t[oldrt].s[1],mid+1,r,pos);pushup(u,l,r);return u;}void query(int u,int l,int r,int ql,int qr,int&res,int&tolmx){if(l>qr||r<ql)return;if(ql<=l&&r<=qr){res=max(res,t[u].f);tolmx+=t[u].lmx;res=max(res,tolmx);if(t[u].len!=t[u].lmx)tolmx=t[u].rmx;res=max(res,tolmx);return;}int mid=(l+r)>>1;query(ls,l,mid,ql,qr,res,tolmx);query(rs,mid+1,r,ql,qr,res,tolmx);}#undef ls#undef rs
}sgt;
struct query
{int h,id;bool operator <(const query x)const{return h>x.h;}
}fe[maxn];int main()
{scanf("%d", &n);for (int i = 1; i <= n; i++){int x;scanf("%d", &x);fe[i].h = x; fe[i].id = i;}sort(fe+1,fe+n+1);rt[0]=sgt.build(1,n);for (int i = 1; i <= n; i++)rt[i]= sgt.insert(rt[i - 1],1,n,fe[i].id);int T_T;scanf("%d",&T_T);while(T_T--){int L,R,W;scanf("%d%d%d",&L,&R,&W);int low=1,high=n,ans;while(low<=high){int mid=(low+high)/2;int toleft=0,res=0;sgt.query(rt[mid],1,n,L,R,res,toleft);if(res>=W){ans=mid;high=mid-1;}else low=mid+1;}printf("%d\n",fe[ans].h);}return 0;
}
          high=mid-1;}else low=mid+1;}printf("%d\n",fe[ans].h);
}return 0;

}


主席树经典应用区间合并相关推荐

  1. 静态主席树总结(静态区间的k大)

    静态主席树总结(静态区间的k大) 首先我们先来看一道题 给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入格式: 第一行包含两个正整数N.M,分别表示序列的长度和查询的个数. ...

  2. zoj 2112 树状数组 套主席树 动态求区间 第k个数

    总算是把动态求区间第k个数的算法看明白了. 在主席树的基础上,如果有修改操作,则要通过套树状数组来实现任意区间求第k小的问题. 刚开始看不明白什么意思,现在有一点理解.树状数组的每个元素是一个线段树, ...

  3. 【HDU - 1540】 Tunnel Warfare (线段树进阶操作 区间合并+ 单点更新+ 最长覆盖区间查询 )

    题干: During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the va ...

  4. hdu 1540(线段树单点更新 区间合并)

    解题思路:这一题要求的是连续区间,所以可以把它的子区间合并,这里运用线段树,但是在保存节点信息的方面要做一点修改 lsum:从这个区间的左端点往右能够找到的最大连续区间: rsum:从这个区间的右端点 ...

  5. Hdu-5919 Sequence II(主席树在线求区间不同数)

    Description Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2,⋯,an There a ...

  6. 线段树应用:区间合并

    传送门luoguP2894 本题我们要维护最左边的值,考虑使用线段树维护.我们发现只用一个来存储当前的节点的值并不够,因为对于一个节点我们无法用一个来描述这整个区间哪些为空,哪些满了,例如查询的跨越了 ...

  7. 主席树 | 莫队 ---- Codeforces Round #716 (Div. 2) D. Cut and Stick [主席树or莫队优化] 区间众数问题(静态)

    题目链接 题目大意: 就是给你nnn个数,和q次询问,每次询问给你一个区间[l,r][l,r][l,r],问你把区间里面的数分配成最少多少块,使得块内出现最多次数的数不超过区间长度的一半(除不尽向上取 ...

  8. hdu 3397 Sequence operation(线段树,lazy,区间合并)

    hdu 3397 Sequence operation 线段树lazy和区间合并结合的一个题,相当于几个题集中到一起嘛,分开想就好了 0,1,2操作都要lazy,2的异或操作找到每一只含1或只含0的区 ...

  9. BZOJ1901Zju2112 Dynamic Rankings——树状数组套主席树

    题目描述 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1 ],a[i+2]--a[j]中第k小的数是多少(1≤k ...

最新文章

  1. Newtonsoft.Json文件错误
  2. linux学习治疗,这时代,医生都用VR帮你看病了!
  3. 计算机病毒洛,蓝狐动漫《百变机兽》中未完的战争,蓝毒兽原来是电脑病毒?...
  4. python base64库介绍
  5. buck电路pscad仿真_典型电路—电容10UF 和0.1UF并联使用的技巧常见于电源电路中,你知道其中的原理吗?...
  6. 【LiveVideoStack线上分享】WebAssembly在Web多媒体领域的相关实践
  7. 打印机显示发送任务到服务器失败,G-FAX单机版操作指引-AOFAX—传真服务器.DOC
  8. linux路由信息预览为空,route - 显示并设置Linux中静态路由表
  9. 什么?你竟然还没有用这几个chrome插件? 1
  10. 数据恢复的学习旅程开始
  11. HDFS常用命令与命令大全及其用法
  12. 电脑键盘部分按键失灵_华硕笔记本键盘有部分按键失灵 - 卡饭网
  13. Spring Boot基础教程 - 程序猿DD
  14. 华为云PBX_基于华为云客服平台打造的比特百灵鸟AI管家解决方案发布
  15. 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(18):方阵的幂级数
  16. firefox浏览器一分钟去广告--去广告插件安装教程(adblock plus)
  17. 机器学习(第二章)—— 模型评估
  18. 史上最强!PC时代的20位英雄
  19. Manifest merger failed with multiple errors问题解决
  20. 计算机办公文档制作,办公室“大秘”教你:如何精确制作“红头文件”的“版记”?-红头文件格式...

热门文章

  1. SpringBoot+Vue项目私人健身与教练预约管理系统
  2. 小康新能源汽车的销量环比持续上升,华为造车似乎要成了
  3. 配置nginx域名转发
  4. npm 设置淘宝源还原官网源
  5. 初识Ubuntu 18.04(更换系统头像,截图,sy)
  6. Android - 实现各种形状的ImageView
  7. 使用postcss-plugin-px2rem和postcss-pxtorem(postcss-px2rem)-px自动转换rem的配置方法-vue-cli3.0
  8. HTML之学习的快乐
  9. python模块之hashlib 1
  10. Python3爬虫(一):Python的入门学习以及Python网络爬虫的初步认识