[BZOJ4552]排序
Description
Input
Output
输出数据仅有一行,一个整数,表示按照顺序将全部的部分排序结束后第q位置上的数字。
Sample Input
1 6 2 5 3 4
0 1 4
1 3 6
0 2 4
3
Sample Output
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #define M 100010
- #define ls node<<1
- #define rs node<<1|1
- using namespace std;
- int n,m,ans,l,r,k;
- int a[M],b[M],opt[M],L[M],R[M],val[M<<],tag[M<<];
- void update(int node) {val[node]=val[ls]+val[rs];}
- void push(int node,int l,int r)
- {
- if(tag[node]!=-)
- {
- int mid=(l+r)/,v=tag[node];
- val[ls]=v*(mid-l+);
- val[rs]=v*(r-mid);
- tag[ls]=tag[rs]=v;
- tag[node]=-;
- }
- }
- void build(int node,int l,int r)
- {
- tag[node]=-;
- if(l==r) {val[node]=b[l];return;}
- int mid=(l+r)/;
- build(ls,l,mid); build(rs,mid+,r);
- update(node);
- }
- void change(int node,int l,int r,int l1,int r1,int v)
- {
- if(l1<=l&&r1>=r)
- {
- tag[node]=v;
- val[node]=(r-l+)*v;
- return;
- }
- if(l1>r||r1<l) return;
- int mid=(l+r)/; push(node,l,r);
- change(ls,l,mid,l1,r1,v); change(rs,mid+,r,l1,r1,v);
- update(node);
- }
- int query(int node,int l,int r,int l1,int r1)
- {
- if(l1<=l&&r1>=r) return val[node];
- if(l1>r||r1<l) return ;
- int mid=(l+r)/; push(node,l,r);
- return query(ls,l,mid,l1,r1)+query(rs,mid+,r,l1,r1);
- }
- bool check(int mid)
- {
- for(int i=;i<=n;i++)
- b[i]=a[i]>=mid?:;
- build(,,n);
- for(int i=;i<=m;i++)
- {
- if(opt[i]==)
- {
- int num=query(,,n,L[i],R[i]);
- change(,,n,R[i]-num+,R[i],);
- change(,,n,L[i],R[i]-num,);
- }
- else
- {
- int num=query(,,n,L[i],R[i]);
- change(,,n,L[i],L[i]+num-,);
- change(,,n,L[i]+num,R[i],);
- }
- }
- return query(,,n,k,k);
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- for(int i=;i<=n;i++) scanf("%d",&a[i]);
- for(int i=;i<=m;i++) scanf("%d%d%d",&opt[i],&L[i],&R[i]);
- scanf("%d",&k);l=,r=n;
- while(l<=r)
- {
- int mid=(l+r)/;
- if(check(mid)) l=mid+,ans=mid;
- else r=mid-;
- }
- printf("%d",ans);
- return ;
- }
[BZOJ4552]排序的更多相关文章
- bzoj4552排序(线段树,二分)
题目大意 给定一个长度为n的序列,有m个操作,操作包括两种: \(0\ l\ r\)区间[l,r]的数字升序排序 \(1\ l\ r\)区间[l,r]的数字降序排序 最后询问在q位置上的数是多少? 其 ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- 【BZOJ4552】排序(线段树,二分答案)
[BZOJ4552]排序(线段树,二分答案) 题面 BZOJ 题解 好神的题啊 直接排序我们做不到 怎么维护? 考虑一下,如果我们随便假设一个答案 怎么检验它是否成立? 把这个数设成\(1\),其他的 ...
- [BZOJ4552][TJOI2016&&HEOI2016]排序(二分答案+线段树/线段树分裂与合并)
解法一:二分答案+线段树 首先我们知道,对于一个01序列排序,用线段树维护的话可以做到单次排序复杂度仅为log级别. 这道题只有一个询问,所以离线没有意义,而一个询问让我们很自然的想到二分答案.先二分 ...
- 【BZOJ4552】[Tjoi2016&Heoi2016]排序 二分+线段树
[BZOJ4552][Tjoi2016&Heoi2016]排序 Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ...
- BZOJ4552 [Tjoi2016&Heoi2016]排序 【二分 + 线段树】
题目链接 BZOJ4552 题解 之前去雅礼培训做过一道题,\(O(nlogn)\)维护区间排序并能在线查询 可惜我至今不能get 但这道题有着\(O(nlog^2n)\)的离线算法 我们看到询问只有 ...
- [bzoj4552][Tjoi2016][Heoi2016]排序
Description 给出一个$1$到$n$的全排列,现在对这个全排列序列进行$m$次局部排序,排序分为$2$种: $1.(0,l,r)$表示将区间$[l,r]$的数字升序排序; $2.(1,l,r ...
- BZOJ4552: [Tjoi2016&Heoi2016]排序
Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- [bzoj4552][Tjoi2016&Heoi2016]排序-二分+线段树
Brief Description DZY有一个数列a[1..n],它是1∼n这n个正整数的一个排列. 现在他想支持两种操作: 0, l, r: 将a[l..r]原地升序排序. 1, l, r: 将a ...
随机推荐
- Spring的Bean的生命周期以及Bean的后置处理器
Bean的生命周期: Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务. Spring IOC 容器对 Bean 的生命周期进 ...
- URI 、URL 和 URN
URI URI 是 Uniform Resource Identifier 的缩写. Uniform 统一不同类型的资源.比如 txt.mp3.jpeg 等不同的类型的资源都可以使用 URI 来标识 ...
- WHICH ONE IS BETTER FOR NEWBIE?
DROP PROCEDURE IF EXISTS w_array; DELIMITER /w/ )) BEGIN ) DO SET @w = LOCATE(',', w_arr); ); SET @w ...
- 并发编程 - io模型 - 总结
1.提交任务得方式: 同步:提交完任务,等结果,执行下一个任务 异步:提交完,接着执行,异步 + 回调 异步不等结果,提交完任务,任务执行完后,会自动触发回调函数2.同步不等于阻塞: 阻塞:遇到io, ...
- 自建YUM仓库
YUM主要用于自动安装.升级rpm软件包,它能自动查找并解决rpm包之间的依赖关系. 要成功的使用YUM工具安装更新软件或系统,就需要有一个包含各种rpm软件包的repository(软件仓库),这个 ...
- Javascript闭包学习(Closure)
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于Javascript初学者应该是很有用的. 一.变量的作用域 要理解 ...
- lua获取table的长度
lua在获取table的size时,不能一味的使用类似于java里面的length函数 table的存储是类似hashTable的kv形式. -- table.getn(tableName) 得到一个 ...
- etcd: request cluster ID mismatch错误解决【只适用于新建etcd集群或无数据集群】
1.报错信息 Mar 29 05:45:31 xxx etcd: request cluster ID mismatch (got 414f8613693e2e2 want cdf818194e3a8 ...
- Servlet实现前后端交互的原理及过程解析
在日常调试项目时,总是利用tomcat去启动项目,并进行前后端联调,但对于前后端的请求响应的交互原理及过程并不是特别清晰. 为什么在前端发出相应请求,就能跳转到后端通过程序得到结果再响应到前端页面呢? ...
- 20165324 Java实验三 敏捷开发与XP实验
20165324 Java实验三 敏捷开发与XP实验 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324 指导教师:娄嘉鹏 实验日期:2018年4月16日 ...