P2824 [HEOI2016/TJOI2016]排序

题意:

有一个长度为\(n\)的1-n的排列\(m\)次操作

\((0,l,r)\)表示序列从\(l\)到\(r\)降序

\((1,l,r)\)表示序列从\(l\)到\(r\)升序

问最终第\(q\)位的元素

数据范围:

\(n,m<=1e5\)


二分答案神题。

我们发现维护区间排序非常困难,然后最终只是若干修改一次询问。

所以我们可以枚举第\(q\)位的是什么,然后把小于等于它的置0,大于它的置0。

这样的话,我们就可以用支持区间查询和区间覆盖的线段树维护升降序了

进一步的,我们发现第q位的数字满足单调性,于是二分答案

复杂度:\(O(nlog^2n)\)


Code:

#include <cstdio>
#define ls id<<1
#define rs id<<1|1
const int N=30010;
int dat[N<<2],lazy[N<<2],m,n,op[N],opr[N],opl[N],a[N],q;
void build(int id,int l,int r,int M)
{
lazy[id]=-1;
if(l==r)
{
dat[id]=(M<a[l]);
return;
}
int mid=l+r>>1;
build(ls,l,mid,M);
build(rs,mid+1,r,M);
dat[id]=dat[ls]+dat[rs];
}
void push_down(int id,int L,int R)
{
if(lazy[id]==-1) return;
if(L!=R)
{
int mid=L+R>>1;
dat[ls]=(mid+1-L)*lazy[id];
dat[rs]=(R-mid)*lazy[id];
lazy[ls]=lazy[rs]=lazy[id];
}
lazy[id]=-1;
}
void change(int id,int L,int R,int l,int r,int delta)
{
if(l>r) return;
push_down(id,L,R);
if(L==l&&R==r)
{
dat[id]=(r+1-l)*delta;
lazy[id]=delta;
return;
}
int mid=L+R>>1;
if(r<=mid)
change(ls,L,mid,l,r,delta);
else if(l>mid)
change(rs,mid+1,R,l,r,delta);
else
change(ls,L,mid,l,mid,delta),change(rs,mid+1,R,mid+1,r,delta);
dat[id]=dat[ls]+dat[rs];
}
int query(int id,int L,int R,int l,int r)
{
push_down(id,L,R);
if(L==l&&R==r)
return dat[id];
int mid=L+R>>1;
if(r<=mid)
return query(ls,L,mid,l,r);
else if(l>mid)
return query(rs,mid+1,R,l,r);
else
return query(ls,L,mid,l,mid)+query(rs,mid+1,R,mid+1,r);
}
bool check(int d)
{
build(1,1,n,d);
for(int i=1;i<=m;i++)
{
int cn1=query(1,1,n,opl[i],opr[i]);
int cn0=opr[i]+1-opl[i]-cn1;
if(op[i]==0)
{
change(1,1,n,opl[i],opl[i]+cn0-1,0);
change(1,1,n,opl[i]+cn0,opr[i],1);
}
else
{
change(1,1,n,opl[i],opl[i]+cn1-1,1);
change(1,1,n,opl[i]+cn1,opr[i],0);
}
}
return query(1,1,n,q,q);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",a+i);
for(int i=1;i<=m;i++)
scanf("%d%d%d",op+i,opl+i,opr+i);
scanf("%d",&q);
int l=1,r=n;
while(l<r)
{
int mid=l+r>>1;
if(check(mid))
l=mid+1;
else
r=mid;
}
printf("%d\n",l);
return 0;
}

2018.7.19

洛谷 P2824 [HEOI2016/TJOI2016]排序 解题报告的更多相关文章

  1. 洛谷$P2824\ [HEOI2016/TJOI2016]$ 排序 线段树+二分

    正解:线段树+二分 解题报告: 传送门$QwQ$ 昂着题好神噢我$jio$得$QwQQQQQ$,,, 开始看到长得很像之前考试题的亚子,,,然后仔细康康发现不一样昂$kk$,就这里范围是$[1,n]$ ...

  2. 洛谷 P4091 [HEOI2016/TJOI2016]求和 解题报告

    P4091 [HEOI2016/TJOI2016]求和 题目描述 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: \[ f(n)=\sum_{i=0}^n\ ...

  3. 洛谷 P4093 [HEOI2016/TJOI2016]序列 解题报告

    P4093 [HEOI2016/TJOI2016]序列 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一 ...

  4. [洛谷P2824][HEOI2016/TJOI2016]排序

    题目大意:一个全排列,两种操作: 1. $0\;l\;r:$把$[l,r]$升序排序2. $1\;l\;r:$把$[l,r]$降序排序 最后询问第$k$位是什么 题解:二分答案,把比这个数大的赋成$1 ...

  5. 洛谷P2824 [HEOI2016/TJOI2016]排序(线段树)

    传送门 这题的思路好清奇 因为只有一次查询,我们考虑二分这个值为多少 将原序列转化为一个$01$序列,如果原序列上的值大于$mid$则为$1$否则为$0$ 那么排序就可以用线段树优化,设该区间内$1$ ...

  6. 洛谷 P2824 [HEOI2016/TJOI2016]排序 (线段树合并)

    (另外:题解中有一种思路很高妙而且看上去可以适用一些其他情况的离线方法) 线段树合并&复杂度的简单说明:https://blog.csdn.net/zawedx/article/details ...

  7. [HEOI2016/TJOI2016] 排序 解题报告(二分答案/线段树分裂合并+set)

    题目链接: https://www.luogu.org/problemnew/show/P2824 题目描述: 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在 ...

  8. 洛谷 2824 [HEOI2016/TJOI2016]排序

    [题意概述] 对一个1到n的排列做m次区间排序,最后询问位置q上面的数. [题解] 区间排序的效率是nlogn,所以暴力做的话效率是mnlogn,显然达不到要求. 我们考虑二分答案.如果某个位置的数比 ...

  9. 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP

    洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...

随机推荐

  1. Spring学习(十)-----Spring依赖检查

    在Spring中,可以使用依赖检查功能,以确保所要求的属性可设置或者注入. 依赖检查模式 4个依赖检查支持的模式: none – 没有依赖检查,这是默认的模式. simple – 如果基本类型(int ...

  2. 自动化运维工具saltstack02 -- 之SaltStack的配置管理

    SaltStack的配置管理 1.配置管理说明 配置管理,顾名思义及配置与管理, salt-master的配置文件编写格式之YAML语法说明: 数据的结构通过缩进来表示,每一级用两个空格来表示缩进,如 ...

  3. NES像素风格的Raspberry

    周末小实践,vue+树莓派+一言API 一直有个想法,让树莓派做后端,实现一个有趣的网络服务.可是,苦于不会前端,迟迟无法动手.最近由于工作任务需要研究了一下前端. 问过前端大佬们,个个都说你得用vu ...

  4. CentOS7.x安装Docker1.11.1

    原文发表于cu:2016-05-30 本文属于重发,当前Docker已经分为EE与CE版本,CE版本是17.06.0-ce,最新的CE版本安装方式已略有不同:但可以指定安装版本,如1.11.1,1.1 ...

  5. centos 6.5 双网卡 上网 virtualbox nat hostonly

    虚拟机两张网卡:分别调成NAT(eth0)和host only(eht1)模式. nat的网卡不用设置,host only网卡调为(vi /etc/sysconfig/network-scripts/ ...

  6. Python常用模块之Pygame(手册篇:首页)

    Pygame手册官方网址:http://www.pygame.org/docs/ Pygame首页 说明文档: 自述 关于Pygame的基本信息,它是什么,谁参与了以及在哪里找到它. 安装 在几个平台 ...

  7. 记录一次爬虫报错:Message: Failed to decode response from marionette

    由于标题中的错误引发: Message: Tried to run command without establishing a connection 解释: 先说一下我的爬虫架构,用的是firefo ...

  8. ThinkPHP - 6 - 学习笔记(2015.5.4)

    解决:OneThink 站点无法被友言uyan后台识别 打开友言uyan插件功能,但OneThink站点无法被友言uyan后台检测到.页面生成的uyan代码为: <!-- UY BEGIN -- ...

  9. javascript提高篇

    本章简介 本章内容比较少,有三个分享的知识.你可能都看过了,因为网上也有很多提问和解答,如果没看过或者没搞懂,你可以再看看这篇文章. 1. 数组去重方法的演变    --  走向代码缩短化 2. [] ...

  10. Scrum立会报告+燃尽图(Beta阶段第二周第三次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2411 项目地址:https://coding.net/u/wuyy694 ...