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 100001 int n,m,p; int a[N],MID; int sum0[N<<],sum1[N<<],flag[N<<]; int tot0,tot1; struct node
{
int ty,l,r;
}e[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void build(int k,int l,int r)
{
sum0[k]=sum1[k]=;
flag[k]=-;
if(l==r)
{
if(a[l]>=MID) sum1[k]++;
else sum0[k]++;
return;
}
int mid=l+r>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
sum0[k]=sum0[k<<]+sum0[k<<|];
sum1[k]=sum1[k<<]+sum1[k<<|];
} void down(int k,int l,int mid,int r)
{
if(!flag[k])
{
sum0[k<<]=mid-l+;
sum1[k<<]=;
sum0[k<<|]=r-mid;
sum1[k<<|]=;
}
else
{
sum1[k<<]=mid-l+;
sum0[k<<]=;
sum1[k<<|]=r-mid;
sum0[k<<|]=;
}
flag[k<<]=flag[k<<|]=flag[k];
flag[k]=-;
} 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>>;
if(flag[k]!=-) down(k,l,mid,r);
if(opl<=mid) query(k<<,l,mid,opl,opr);
if(opr>mid) query(k<<|,mid+,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+;
sum1[k]=;
}
else
{
sum0[k]=;
sum1[k]=r-l+;
}
flag[k]=ty;
return;
}
int mid=l+r>>;
if(flag[k]!=-) down(k,l,mid,r);
if(opl<=mid) change(k<<,l,mid,opl,opr,ty);
if(opr>mid) change(k<<|,mid+,r,opl,opr,ty);
sum0[k]=sum0[k<<]+sum0[k<<|];
sum1[k]=sum1[k<<]+sum1[k<<|];
} int ask(int k,int l,int r,int pos)
{
if(l==r) return sum1[k];
int mid=l+r>>;
if(flag[k]!=-) down(k,l,mid,r);
if(pos<=mid) return ask(k<<,l,mid,pos);
return ask(k<<|,mid+,r,pos);
} bool check(int mid)
{
MID=mid;
build(,,n);
for(int i=;i<=m;++i)
{
tot0=tot1=;
query(,,n,e[i].l,e[i].r);
if(!e[i].ty)
{
if(tot0) change(,,n,e[i].l,e[i].l+tot0-,);
if(tot1) change(,,n,e[i].r-tot1+,e[i].r,);
}
else
{
if(tot1) change(,,n,e[i].l,e[i].l+tot1-,);
if(tot0) change(,,n,e[i].r-tot0+,e[i].r,);
}
}
return ask(,,n,p);
} int main()
{
read(n); read(m);
for(int i=;i<=n;++i) read(a[i]);
for(int i=;i<=m;++i) read(e[i].ty),read(e[i].l),read(e[i].r);
read(p);
int l=,r=n,mid,ans;
while(l<=r)
{
mid=MID=l+r>>;
if(check(mid)) ans=mid,l=mid+;
else r=mid-;
}
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

bzoj千题计划128:bzoj4552: [Tjoi2016&Heoi2016]排序的更多相关文章

  1. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  2. 2018.08.01 BZOJ4552: [Tjoi2016&Heoi2016]排序(二分+线段树)

    传送门 线段树简单题. 二分答案+线段树排序. 实际上就是二分答案mid" role="presentation" style="position: relat ...

  3. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

  4. bzoj千题计划190:bzoj4300: 绝世好题

    http://www.lydsy.com/JudgeOnline/problem.php?id=4300 f[i] 表示第i位&为1的最长长度 #include<cstdio> # ...

  5. bzoj千题计划121:bzoj1033: [ZJOI2008]杀蚂蚁antbuster

    http://www.lydsy.com/JudgeOnline/problem.php?id=1033 经半个下午+一个晚上+半个晚上 的 昏天黑地调代码 最终成果: codevs.洛谷.tyvj上 ...

  6. bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...

  7. bzoj千题计划177:bzoj1858: [Scoi2010]序列操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...

  8. bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...

  9. bzoj千题计划168:bzoj3513: [MUTC2013]idiots

    http://www.lydsy.com/JudgeOnline/problem.php?id=3513 组成三角形的条件:a+b>c 其中,a<c,b<c 若已知 两条线段之和=i ...

随机推荐

  1. ssr 服务端安装教程

    1 ShadowsocksR 多用户版服务端安装教程(SS-Panel后端) 2 ShadowsocksR 单用户版服务端安装教程

  2. JQuery AJAX 全局设置

    现在需要给每个请求都加一个请求头,挨个修改太麻烦.可以用如下方式: $.ajaxSettings.beforeSend= function(request) { request.setRequestH ...

  3. 如何直接在github上预览html网页效果

    http://justcoding.iteye.com/blog/2321552 2.vue 配合vue-resource调用接口,获取数据   https://www.cnblogs.com/fei ...

  4. 【bzoj2151】种树

    Time Limit: 1000ms                     Memory Limit: 128MB Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府 ...

  5. Java 多线程之线程池的使用

    一. 使用背景 谈到Java多线程,我们很自然的会想到并发,在编写多线程代码时,我们一般会创建多个线程,如果并发的线程数量很多,而且每个线程都是执行一个时间很短的任务就结束了,这样频繁的进行线程的创建 ...

  6. 三大家族,offset,scroll,client

    1.client 1.1主要成员 1.clientWidth 获取网页可视区域宽度(两种用法)    clientHeight 获取网页可视区域高度 (两张用法) 盒子调用: 指盒子本省 浏览器调用: ...

  7. MyBatis延迟加载和缓存

    一.延迟加载 1.主对象的加载: 根本没有延迟的概念,都是直接加载. 2.关联对象的加载时机: 01.直接加载: 访问主对象,关联对象也要加载 02.侵入式延迟: 访问主对象,并不加载关联对象 访问主 ...

  8. Database operations of Mysql

    update 表名 set 字段名=replace(同一个字段名,原字符串,新字符串);  --修改记录. 一.初始化 # cd /usr/local/mysql # chown -R mysql:m ...

  9. Elasticsearch就这么简单

    一.前言 最近有点想弄一个站内搜索的功能,之前学过了Lucene,后来又听过Solr这个名词.接着在了解全文搜索的时候就发现了Elasticsearch这个,他也是以Lucene为基础的. 我去搜了几 ...

  10. Mysql使用规范文档 20180223版

    强制:不允许在跳板机上/生产服务器上手工连接,查询或更改线上数据 强制:所有上线脚本必须先在测试环境执行,验证通过以后方可在生产环境执行. 强制:上线脚本的编码格式统一为UTF-8 强制:访问数据库需 ...