洛谷 P2824 [HEOI2016/TJOI2016]排序 解题报告
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]排序 解题报告的更多相关文章
- 洛谷$P2824\ [HEOI2016/TJOI2016]$ 排序 线段树+二分
正解:线段树+二分 解题报告: 传送门$QwQ$ 昂着题好神噢我$jio$得$QwQQQQQ$,,, 开始看到长得很像之前考试题的亚子,,,然后仔细康康发现不一样昂$kk$,就这里范围是$[1,n]$ ...
- 洛谷 P4091 [HEOI2016/TJOI2016]求和 解题报告
P4091 [HEOI2016/TJOI2016]求和 题目描述 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: \[ f(n)=\sum_{i=0}^n\ ...
- 洛谷 P4093 [HEOI2016/TJOI2016]序列 解题报告
P4093 [HEOI2016/TJOI2016]序列 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一 ...
- [洛谷P2824][HEOI2016/TJOI2016]排序
题目大意:一个全排列,两种操作: 1. $0\;l\;r:$把$[l,r]$升序排序2. $1\;l\;r:$把$[l,r]$降序排序 最后询问第$k$位是什么 题解:二分答案,把比这个数大的赋成$1 ...
- 洛谷P2824 [HEOI2016/TJOI2016]排序(线段树)
传送门 这题的思路好清奇 因为只有一次查询,我们考虑二分这个值为多少 将原序列转化为一个$01$序列,如果原序列上的值大于$mid$则为$1$否则为$0$ 那么排序就可以用线段树优化,设该区间内$1$ ...
- 洛谷 P2824 [HEOI2016/TJOI2016]排序 (线段树合并)
(另外:题解中有一种思路很高妙而且看上去可以适用一些其他情况的离线方法) 线段树合并&复杂度的简单说明:https://blog.csdn.net/zawedx/article/details ...
- [HEOI2016/TJOI2016] 排序 解题报告(二分答案/线段树分裂合并+set)
题目链接: https://www.luogu.org/problemnew/show/P2824 题目描述: 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在 ...
- 洛谷 2824 [HEOI2016/TJOI2016]排序
[题意概述] 对一个1到n的排列做m次区间排序,最后询问位置q上面的数. [题解] 区间排序的效率是nlogn,所以暴力做的话效率是mnlogn,显然达不到要求. 我们考虑二分答案.如果某个位置的数比 ...
- 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP
洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...
随机推荐
- Scrapy爬取美女图片续集 (原创)
上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用.(我的新书< ...
- Jquery操作下拉列表和复选框,自定义下拉
后半部分还有自定义下拉列表和开灯关灯的效果,可以进来来看一下 哦 如果网页有下拉列表和复选框,看一下Jquery怎么来操作他们,主要怎么来选取他们的数据,怎么设置某一项选中 先来看个下拉列表 < ...
- 同一个电脑配置两个Git问题
拿到公司电脑后,正常配置gitlab,以及设置邮箱等等,可以使用公司邮箱,以及一系列设置 git config --global user.name "userName" git ...
- HTTP结构讲解——《HTTP权威指南》系列
HTTP结构 第二部分的5章主要介绍了HTTP服务器,代理,缓存,网关和机器人应用程序,这些都是Web系统架构的构造模块. Web服务器 第五章 Web服务器会对HTTP请求进行处理并提供响应.术语& ...
- selenium 各种很奇葩的异常
问题1:使用selenium3+java的脚本模拟登陆时,总是提示用户名,密码错误 解决方法:1 在执行输入用户名和密码的代码之前,加上driver.navigate().refresh(); QQ群 ...
- springMVC 第一章
springMVC 第一章 一.分层结构的项目 组成方式: 表示层:页面,Servlet 业务层:业务逻辑类(service) 持久层:与数据库交互的类(dao) 程序执行的过程:表示层->se ...
- 论文笔记:Visualizing and Understanding Convolutional Networks
2014 ECCV 纽约大学 Matthew D. Zeiler, Rob Fergus 简单介绍(What) 提出了一种可视化的技巧,能够看到CNN中间层的特征功能和分类操作. 通过对这些可视化信息 ...
- mysql优化建议21条
转自: http://blog.csdn.net/waferleo/article/details/7179009 今 天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于 ...
- 阿帕奇web服务器下载部署安装运行
链接: https://jingyan.baidu.com/album/d8072ac47baf0eec95cefdca.html?picindex=4 1.apache服务安装成功可是启动失败“wi ...
- P4语法(4)Control block
Control block Control block之中用于放置设计好的Table和Action. 可以把control block认为是pipeline的一个模板,之前用的v1model中就是in ...