[Tjoi2016&Heoi2016]排序[01序列]
4552: [Tjoi2016&Heoi2016]排序
Time Limit: 60 Sec Memory Limit: 256 MB
Submit: 994 Solved: 546
[Submit][Status][Discuss]
Description
Input
Output
输出数据仅有一行,一个整数,表示按照顺序将全部的部分排序结束后第q位置上的数字。
Sample Input
1 6 2 5 3 4
0 1 4
1 3 6
0 2 4
3
Sample Output
HINT
Source

#include<cstdio>
#include<cstring>
#define lch k<<1
#define rch k<<1|1
using namespace std;
const int N=1e5+,M=N<<;
int n,m,p,a[N],q[N][];
int sum[M],tag[M];
inline void opera(int k,int sz,int v){
sum[k]=sz*v;
}
inline void pushdown(int k,int l,int r){
if(~tag[k]){
int mid=(l+r)>>;
tag[lch]=tag[k];opera(lch,mid-l+,tag[k]);
tag[rch]=tag[k];opera(rch,r-mid,tag[k]);
tag[k]=-;
}
}
void change(int k,int l,int r,int x,int y,int v){
if(x>y) return ;
if(l==x&&r==y){
opera(k,r-l+,v);
tag[k]=v;
return ;
}
pushdown(k,l,r);
int mid=(l+r)>>;
if(y<=mid) change(lch,l,mid,x,y,v);
else if(x>mid) change(rch,mid+,r,x,y,v);
else change(lch,l,mid,x,mid,v),change(rch,mid+,r,mid+,y,v);
sum[k]=sum[lch]+sum[rch];
}
int query(int k,int l,int r,int x,int y){
if(l==x&&r==y) return sum[k];
pushdown(k,l,r);
int mid=(l+r)>>;
if(y<=mid) return query(lch,l,mid,x,y);
else if(x>mid) return query(rch,mid+,r,x,y);
else return query(lch,l,mid,x,mid)+query(rch,mid+,r,mid+,y);
}
inline int work(int now){
memset(sum,,sizeof sum);
memset(tag,-,sizeof tag);
for(int i=;i<=n;i++) change(,,n,i,i,a[i]>=now);
for(int i=,t;i<=m;i++){
t=query(,,n,q[i][],q[i][]);
if(!q[i][]){
change(,,n,q[i][],q[i][]-t,);
change(,,n,q[i][]-t+,q[i][],);
}
else{
change(,,n,q[i][],q[i][]+t-,);
change(,,n,q[i][]+t,q[i][],);
}
}
return query(,,n,p,p);
}
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",&q[i][],&q[i][],&q[i][]);
scanf("%d",&p);
int l=,r=n,mid,ans;
while(l<=r){
mid=(l+r)>>;
if(work(mid)) l=mid+,ans=mid;
else r=mid-;
}
printf("%d\n",ans);
return ;
}
[Tjoi2016&Heoi2016]排序[01序列]的更多相关文章
- BZOJ 4552: [Tjoi2016&Heoi2016]排序
4552: [Tjoi2016&Heoi2016]排序 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 579 Solved: 322[Sub ...
- bzoj千题计划128:bzoj4552: [Tjoi2016&Heoi2016]排序
http://www.lydsy.com/JudgeOnline/problem.php?id=4552 二分答案 把>=mid 的数看做1,<mid 的数看做0 这样升序.降序排列相当于 ...
- 【BZOJ4552】[Tjoi2016&Heoi2016]排序 二分+线段树
[BZOJ4552][Tjoi2016&Heoi2016]排序 Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ...
- 4552: [Tjoi2016&Heoi2016]排序
4552: [Tjoi2016&Heoi2016]排序 链接 分析: 因为只询问一次,所以考虑二分这个数.显然是没有单调性的,但是我们可以二分所有大于等于mid的数中,是否有满足条件的x(而不 ...
- BZOJ4552: [Tjoi2016&Heoi2016]排序
Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- BZOJ 4552 [Tjoi2016&Heoi2016]排序 | 二分答案 线段树
题目链接 题面 题目描述 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- [BZOJ4552][TJOI2016&&HEOI2016]排序(二分答案+线段树/线段树分裂与合并)
解法一:二分答案+线段树 首先我们知道,对于一个01序列排序,用线段树维护的话可以做到单次排序复杂度仅为log级别. 这道题只有一个询问,所以离线没有意义,而一个询问让我们很自然的想到二分答案.先二分 ...
- [TJOI2016][HEOI2016]排序
题目大意: 给定一个$1\sim n(n\leq10^5)$的全排列,有$m(m\leq10^5)$次操作,每次把区间$[l,r]$按照升序或降序排序.最后询问所有操作完成后,位置为$q$的数是多少. ...
- BZOJ 4552 [Tjoi2016&Heoi2016]排序 ——线段树 二分答案
听说是BC原题. 好题,二分答案变成01序列,就可以方便的用线段树维护了. 然后就是区间查询和覆盖了. #include <map> #include <cmath> #inc ...
随机推荐
- 【Web API系列教程】3.3 — 实战:处理数据(建立数据库)
前言 在本部分中,你将在EF上使用Code First Migration来用測试数据建立数据库. 在Tools文件夹下选择Library Package Manager,然后选择Package Ma ...
- AsmTools
前言 https://wiki.openjdk.java.net/display/CodeTools/asmtools 在OpenJDK里有一个AsmTools项目,用来生成正确的或者不正确的java ...
- UNIX环境编程学习笔记(14)——文件I/O之临时文件
lienhua342014-10-01 ISO C 标准 I/O 库提供了个两个函数 tmpnam 和 tmpfile 以帮助创建临时文件, #include <stdio.h> char ...
- vim 编辑器常用命令
vi 常用命令行 1.vi 模式 a) 一般模式: vi 处理文件时,一进入该文件,就是一般模式了. b) 编辑模式:在一般模式下可以进行删除,复制,粘贴等操作,却无法进行编辑操作.等按下‘i,I,o ...
- MathType怎么编辑半开半闭区间
数学中的公式有很多,涉及到各种各样的样式,这些公式都会用到不同的符号,每一个符号用在不同数学问题的公式中,都会有其特定的意义,比如括号.括号这个符号在除了能够表示优先运算之外,还可以代表区间的意思,小 ...
- Array常用函数收藏
1.isArray 语法:Array.isArray(obj) 说明:判断一个对象是否是数组. 例如: Array.isArray([]); Array.isArray([1]); Array.isA ...
- [转]油猴Tampermonkey-让百度云下载飞起来
1. 简介 Tampermonkey,油猴脚本是一款免费的浏览器扩展程序. 我们这里用于Chrome浏览器,目的是为了让百度云里面的文件以满速下载,VIP还得出钱呢. 2. 安装 安装Lantern蓝 ...
- 妙味远程课堂-JS属性
html由属性名和属性值组成 属性读操作:获取.找到 元素.innerHtml//读取元素内的html内容 元素.属性名 案例1:点击按钮弹出文本框的内容(value值) <!DOCTYPE h ...
- python,如何获取字符串中的子字符串,部分字符串
说明: 比如有一个字符串,python,如何就获取前3位,或者后2位.在此记录下. 操作过程: 1.通过分割符的方式,下标的方式,获取字符串中的子串 >>> text = 'pyth ...
- pom.xml 配置maven私服
1.pom.xml 配置maven私服 <repositories> <repository> <id>caf_repositories& ...