http://www.lydsy.com/JudgeOnline/problem.php?id=4552

二分答案

把>=mid 的数看做1,<mid 的数看做0

这样升序、降序排列相当于区间查询0,1 的个数,区间覆盖0,1

线段树即可完成

查询给定位置p

如果=1,说明p位置的数>=mid ,上调下界

如果=0,说明p位置的数<mid,下调上界

#include<cstdio>
#include<iostream>
#include<algorithm>using namespace std;#define N 100001int n,m,p;int a[N],MID;int sum0[N<<2],sum1[N<<2],flag[N<<2];int tot0,tot1;struct node
{int ty,l,r;
}e[N];void read(int &x)
{x=0; char c=getchar();while(!isdigit(c)) c=getchar();while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }
}void build(int k,int l,int r)
{sum0[k]=sum1[k]=0;flag[k]=-1;if(l==r){if(a[l]>=MID) sum1[k]++;else sum0[k]++;return;}int mid=l+r>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);sum0[k]=sum0[k<<1]+sum0[k<<1|1];sum1[k]=sum1[k<<1]+sum1[k<<1|1];
}void down(int k,int l,int mid,int r)
{if(!flag[k]){sum0[k<<1]=mid-l+1;sum1[k<<1]=0;sum0[k<<1|1]=r-mid;sum1[k<<1|1]=0;}else{sum1[k<<1]=mid-l+1;sum0[k<<1]=0;sum1[k<<1|1]=r-mid;sum0[k<<1|1]=0;}flag[k<<1]=flag[k<<1|1]=flag[k];flag[k]=-1;
}void query(int k,int l,int r,int opl,int opr)
{if(l>=opl && r<=opr) {tot0+=sum0[k];tot1+=sum1[k];return;}int mid=l+r>>1;if(flag[k]!=-1) down(k,l,mid,r);if(opl<=mid) query(k<<1,l,mid,opl,opr);if(opr>mid) query(k<<1|1,mid+1,r,opl,opr);
}void change(int k,int l,int r,int opl,int opr,int ty)
{if(l>=opl && r<=opr){if(!ty) {sum0[k]=r-l+1;sum1[k]=0;}else {sum0[k]=0;sum1[k]=r-l+1;}flag[k]=ty;return;}int mid=l+r>>1;if(flag[k]!=-1) down(k,l,mid,r);if(opl<=mid) change(k<<1,l,mid,opl,opr,ty);if(opr>mid) change(k<<1|1,mid+1,r,opl,opr,ty);sum0[k]=sum0[k<<1]+sum0[k<<1|1];sum1[k]=sum1[k<<1]+sum1[k<<1|1];
}int ask(int k,int l,int r,int pos)
{if(l==r) return sum1[k];int mid=l+r>>1;if(flag[k]!=-1) down(k,l,mid,r);if(pos<=mid) return ask(k<<1,l,mid,pos);return ask(k<<1|1,mid+1,r,pos);
}bool check(int mid)
{MID=mid;build(1,1,n);for(int i=1;i<=m;++i){tot0=tot1=0;query(1,1,n,e[i].l,e[i].r);if(!e[i].ty){if(tot0) change(1,1,n,e[i].l,e[i].l+tot0-1,0);if(tot1) change(1,1,n,e[i].r-tot1+1,e[i].r,1);}else{if(tot1) change(1,1,n,e[i].l,e[i].l+tot1-1,1);if(tot0) change(1,1,n,e[i].r-tot0+1,e[i].r,0);}}return ask(1,1,n,p);
}int main()
{read(n); read(m);for(int i=1;i<=n;++i) read(a[i]);for(int i=1;i<=m;++i) read(e[i].ty),read(e[i].l),read(e[i].r);read(p);int l=1,r=n,mid,ans;while(l<=r){mid=MID=l+r>>1;if(check(mid)) ans=mid,l=mid+1;else r=mid-1;}cout<<ans;
}

4552: [Tjoi2016&Heoi2016]排序

Time Limit: 60 Sec  Memory Limit: 256 MB
Submit: 1478  Solved: 748
[Submit][Status][Discuss]

Description

在2016年,佳媛姐姐喜欢上了数字序列。因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题
,需要你来帮助他。这个难题是这样子的:给出一个1到n的全排列,现在对这个全排列序列进行m次局部排序,排
序分为两种:1:(0,l,r)表示将区间[l,r]的数字升序排序2:(1,l,r)表示将区间[l,r]的数字降序排序最后询问第q
位置上的数字。

Input

输入数据的第一行为两个整数n和m。n表示序列的长度,m表示局部排序的次数。1 <= n, m <= 10^5第二行为n个整
数,表示1到n的一个全排列。接下来输入m行,每一行有三个整数op, l, r, op为0代表升序排序,op为1代表降序
排序, l, r 表示排序的区间。最后输入一个整数q,q表示排序完之后询问的位置, 1 <= q <= n。1 <= n <= 10^5
,1 <= m <= 10^5

Output

输出数据仅有一行,一个整数,表示按照顺序将全部的部分排序结束后第q位置上的数字。

Sample Input

6 3
1 6 2 5 3 4
0 1 4
1 3 6
0 2 4
3

Sample Output

5

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/7932200.html

bzoj千题计划128:bzoj4552: [Tjoi2016Heoi2016]排序相关推荐

  1. BZOJ 2150. 部落战争(最小路径覆盖问题)【BZOJ千题计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 刷题就图一乐 题目链接 https://hydro.ac/d/bzoj/p/2150 是 hydro ...

  2. BZOJ 2151 种树(可反悔贪心,链表)【BZOJ千题计划】就图一乐

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2151 是 hydro 的 BZOJ ...

  3. BZOJ 1799 [Ahoi2009] self 同类分布(数位DP)【BZOJ千题计划(quexin】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/1799(样例时限设置有问题,应该为 2 ...

  4. bzoj千题计划143:bzoj1935: [Shoi2007]Tree 园丁的烦恼

    http://www.lydsy.com/JudgeOnline/problem.php?id=1935 二维偏序问题 排序x,离散化树状数组维护y #include<cstdio> #i ...

  5. bzoj千题计划248:bzoj3697: 采药人的路径

    http://www.lydsy.com/JudgeOnline/problem.php?id=3697 点分治 路径0改为路径-1 g[i][0/1] 和 f[i][0/1]分别表示当前子树 和 已 ...

  6. bzoj千题计划237:bzoj1492: [NOI2007]货币兑换Cash

    http://www.lydsy.com/JudgeOnline/problem.php?id=1492 dp[i] 表示 第i天卖完的最大收益 朴素的dp: 枚举从哪一天买来的在第i天卖掉,或者是不 ...

  7. bzoj千题计划197:bzoj4247: 挂饰

    http://www.lydsy.com/JudgeOnline/problem.php?id=4247 先把挂饰按挂钩数量从大到小排序 dp[i][j]前i个挂饰,剩下j个挂钩的最大喜悦值 分挂和不 ...

  8. bzoj千题计划161:bzoj1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果

    http://www.lydsy.com/JudgeOnline/problem.php?id=1589 tarjan缩环后拓扑排序上DP #include<cstdio> #includ ...

  9. bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战

    http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ...

最新文章

  1. 竟然是它:# vi /etc/resolv.conf
  2. hdu 5019 第k大公约数
  3. 马斯克:人脑“带宽”有限,需要用人工智能加持提高连接速度
  4. 编程名言(有些趣味性)
  5. 使用Spring Boot 2使用OAuth2和不透明令牌进行集中授权
  6. getseconds补0_Java Duration类| getSeconds()方法与示例
  7. 单主复制与多主复制入门
  8. 方管图纸标注_图样中型材的标注方法
  9. COMSOL案例内容,有需要的了解下!
  10. 一个c语言源程序至少包含,一个C源程序必须包含一个main函数
  11. 扫码枪 - 优惠卷核销
  12. 关于3阶Volterra滤波器一些理解
  13. 跟着小码哥一起学习OC语法,都在这里了
  14. ReadyAPI 教程和示例(一)
  15. Access 查询的IIF的写法
  16. 天猫精灵python开发_天猫精灵X1智能音箱使用感想
  17. 怎么查看无线路由器连接的设备连接服务器,手机如何查看无线wifi连接人数 手机查看无线wifi连接人数方法【介绍】...
  18. OTG线与普通USB线的区别
  19. 入场需知|英利参展|第86届中国国际医疗器械博览会-2022CMEF深圳医疗器械展会
  20. 飞书开发API的调用

热门文章

  1. oracle11g到底是什么6,Oracle11g六个重要进程
  2. 全网最具深度的三次握手、四次挥手讲解,深夜思考
  3. 十年Java编程开发生涯,java内存溢出和内存泄漏的区别
  4. python ansible_Ansible Python API | linux系统运维
  5. 上海东华计算机专业学硕复试,17届东华计算机初试+复试经验分享~
  6. Spring 源码分析, ApplicationContext build 包找不到编译异常
  7. 网络推广外包——还记得网络推广外包中的site收录吗?
  8. 网站建设想要赢得用户的认可和客户的满意并不容易
  9. 网站优化不能忽视网站外链的作用
  10. 影响网站快照异常的因素有哪些?