BZOJ 4552 排序
省选TM都能有BC原题?
。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100500
#define inf 1000000007
using namespace std;
int n,m,a[maxn],l=inf,r=,mi,q;
int ls[maxn<<],rs[maxn<<],lazy[maxn<<],sum[maxn<<],root,tot=;
int pos[maxn],ans;
struct move
{
int type,l,r;
}p[maxn];
void build(int &now,int left,int right)
{
now=++tot;lazy[now]=-;
if (left==right)
{
pos[left]=now;
if (a[left]>=mi) {lazy[now]=;sum[now]=;}
else {lazy[now]=;sum[now]=;}
return;
}
int mid=(left+right)>>;
build(ls[now],left,mid);
build(rs[now],mid+,right);
sum[now]=sum[ls[now]]+sum[rs[now]];
}
void pushdown(int now,int left,int right)
{
if (lazy[now]==-) return;
if (left==right) return;
int mid=(left+right)>>;
if (lazy[now]==)
{
lazy[ls[now]]=;sum[ls[now]]=;
lazy[rs[now]]=;sum[rs[now]]=;
}
else
{
lazy[ls[now]]=;sum[ls[now]]=mid-left+;
lazy[rs[now]]=;sum[rs[now]]=right-mid;
}
lazy[now]=-;
}
int query(int now,int left,int right,int l,int r)
{
pushdown(now,left,right);
if ((left==l) && (right==r))
return sum[now];
int mid=(left+right)>>;
if (r<=mid) return query(ls[now],left,mid,l,r);
else if (l>=mid+) return query(rs[now],mid+,right,l,r);
else return query(ls[now],left,mid,l,mid)+query(rs[now],mid+,right,mid+,r);
}
void modify(int now,int left,int right,int l,int r,int p)
{
pushdown(now,left,right);
if ((left==l) && (right==r))
{
lazy[now]=p;
if (p==) sum[now]=;
else sum[now]=right-left+;
return;
}
int mid=(left+right)>>;
if (r<=mid) modify(ls[now],left,mid,l,r,p);
else if (l>=mid+) modify(rs[now],mid+,right,l,r,p);
else
{
modify(ls[now],left,mid,l,mid,p);
modify(rs[now],mid+,right,mid+,r,p);
}
sum[now]=sum[ls[now]]+sum[rs[now]];
}
void work0(int x)
{
int len=p[x].r-p[x].l+,lenr=query(root,,n,p[x].l,p[x].r);
if (p[x].l<=p[x].l+(len-lenr)-) modify(root,,n,p[x].l,p[x].l+(len-lenr)-,);
if (p[x].l+(len-lenr)<=p[x].r) modify(root,,n,p[x].l+(len-lenr),p[x].r,);
}
void work1(int x)
{
int len=p[x].r-p[x].l+,lenl=query(root,,n,p[x].l,p[x].r);
if (p[x].l<=p[x].l+lenl-) modify(root,,n,p[x].l,p[x].l+lenl-,);
if (p[x].l+lenl<=p[x].r) modify(root,,n,p[x].l+lenl,p[x].r,);
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
{
scanf("%d",&a[i]);
l=min(l,a[i]);
r=max(r,a[i]);
}
for (int i=;i<=m;i++)
scanf("%d%d%d",&p[i].type,&p[i].l,&p[i].r);
scanf("%d",&q);
while (l<=r)
{
tot=;
mi=(l+r)>>;
build(root,,n);
for (int i=;i<=m;i++)
{
if (p[i].type==) work0(i);
else work1(i);
}
int regis=query(root,,n,q,q);
if (regis==) {ans=mi;l=mi+;}
else r=mi-;
}
printf("%d\n",ans);
return ;
}
BZOJ 4552 排序的更多相关文章
- BZOJ 4552 排序 Heoi2016
记得当年省选的时候 这道题连暴力都没写对(尴尬ing) (当年天真的认为sort是左闭右闭的hhhhhh) 思路: 首先 二分答案 线段树 首先二分答案,然后需要知道进行m次排序后p位置上的数字是否大 ...
- BZOJ 4552: [Tjoi2016&Heoi2016]排序
4552: [Tjoi2016&Heoi2016]排序 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 579 Solved: 322[Sub ...
- bzoj 4552 [Tjoi2016&Heoi2016]排序 (二分答案 线段树)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4552 题意: 给你一个1-n的全排列,m次操作,操作由两种:1.将[l,r]升序排序,2 ...
- BZOJ 4552 [Tjoi2016&Heoi2016]排序 线段树的分裂和合并
https://www.lydsy.com/JudgeOnline/problem.php?id=4552 https://blog.csdn.net/zawedx/article/details/5 ...
- bzoj 4552 [Tjoi2016&Heoi2016]排序——二分答案
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4552 二分答案,把 >= mid 的设成1.< mid 的设成0,之后排序就变成 ...
- BZOJ 4552 [Tjoi2016&Heoi2016]排序 | 二分答案 线段树
题目链接 题面 题目描述 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- BZOJ 4552: [Tjoi2016&Heoi2016]排序 线段树 二分
目录 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 update 10.6 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 /* //fang zhi ...
- bzoj 4552: [Tjoi2016&Heoi2016]排序——二分+线段树
Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- 排序(bzoj 4552)
Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
随机推荐
- PHP 性能分析与实验——性能的宏观分析
[编者按]此前,阅读过了很多关于 PHP 性能分析的文章,不过写的都是一条一条的规则,而且,这些规则并没有上下文,也没有明确的实验来体现出这些规则的优势,同时讨论的也侧重于一些语法要点.本文就改变 P ...
- codeforces 439D Devu and Partitioning of the Array(有深度的模拟)
题目 //参考了网上的代码 注意答案可能超过32位 //要达成目标,就是要所有数列a的都比数列b的要小或者等于 //然后,要使最小的要和最大的一样大,就要移动(大-小)步, //要使较小的要和较大的一 ...
- awk处理之案例四:sort加awk来过滤文本
编译环境 本系列文章所提供的算法均在以下环境下编译通过. [脚本编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...
- 安装mysql之后,存入中文出现乱码 02
现在出现这个问题,将编码字符串改成utf8 之后 数据表 还是不能存储中文. 看如下两张图,应该会有启发: 这下应该明白了吧.
- java系统属性
java系统属性 1. java.runtime.name:java的运行环境名称. 2. sun.boot.library.path:jdk\jre中的bin的路径 3. java.vm.versi ...
- poj 3159(差分约束经典题)
题目链接:http://poj.org/problem?id=3159思路:题目意思很简单,都与给定的条件dist[b]-dist[a]<=c,求dist[n]-dist[1]的最大值,显然这是 ...
- DAL层与BLL层的设计原则
通用DAL层: 提供一个通用的DAL层的基础框架,其中包括所有实体类的基类,所有DAL类的基类,以及用来在实体类和数据表以及实体类字段和数据表字段之间Mapping的Attributes.此层作为核心 ...
- 540A: Combination Lock
题目链接:http://codeforces.com/problemset/problem/540/A 题意: 输入的两个长度一样的数,求对应位置的某位数到下一个数需要最小的步长,每次只能先前或先后走 ...
- java异步操作实例
1.异步操作过程实例: A.开启一个线程一直执行耗时操作 B.通过每隔多长多件轮询线程是否实行完毕,thread.isCompleted() C.执行完毕后,通过回调函数返回真实信息 一个调用者在调用 ...
- linux 操作系统下c语言编程入门
2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 ...