bzoj 4552 [Tjoi2016&Heoi2016]排序——二分答案
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4552
二分答案,把 >= mid 的设成1、< mid 的设成0,之后排序就变成区间赋值了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ls Ls[cr]
#define rs Rs[cr]
using namespace std;
const int N=1e5+,M=N<<;
int n,m,a[N],ps; bool b[N];
int tot,Ls[M],Rs[M],sm[M],len[M],tg[M];
struct Node{bool op;int l,r;}q[N];
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
void init(int l,int r,int cr)
{
len[cr]=r-l+;
if(l==r)return; int mid=l+r>>;
ls=++tot;init(l,mid,ls);
rs=++tot;init(mid+,r,rs);
}
void build(int l,int r,int cr)
{
tg[cr]=-;//
if(l==r){sm[cr]=b[l];return;}
int mid=l+r>>;
build(l,mid,ls); build(mid+,r,rs);
sm[cr]=sm[ls]+sm[rs];
}
void pshd(int cr)
{
if(tg[cr]<)return;tg[ls]=tg[rs]=tg[cr];
sm[ls]=(tg[cr]?len[ls]:);sm[rs]=(tg[cr]?len[rs]:);
tg[cr]=-;
}
void mdfy(int l,int r,int cr,int L,int R,bool k)
{
if(L>R)return;////
if(l>=L&&r<=R){tg[cr]=k;sm[cr]=(k?len[cr]:);return;}
int mid=l+r>>;pshd(cr);
if(L<=mid)mdfy(l,mid,ls,L,R,k);
if(mid<R)mdfy(mid+,r,rs,L,R,k);
sm[cr]=sm[ls]+sm[rs];
}
int query(int l,int r,int cr,int L,int R)
{
if(l>=L&&r<=R)return sm[cr];
int mid=l+r>>; pshd(cr);
if(L>mid)return query(mid+,r,rs,L,R);
if(R<=mid)return query(l,mid,ls,L,R);
return query(l,mid,ls,L,R)+query(mid+,r,rs,L,R);
}
bool chk(int mid)
{
for(int i=;i<=n;i++)b[i]=(a[i]>=mid);
build(,n,);
for(int i=;i<=m;i++)
{
int d=query(,n,,q[i].l,q[i].r);
if(q[i].op)
{
mdfy(,n,,q[i].l,q[i].l+d-,);
mdfy(,n,,q[i].l+d,q[i].r,);
}
else
{
mdfy(,n,,q[i].r-d+,q[i].r,);
mdfy(,n,,q[i].l,q[i].r-d,);
}
}
return query(,n,,ps,ps);
}
int main()
{
n=rdn();m=rdn();tot=;init(,n,);
for(int i=;i<=n;i++)a[i]=rdn();
for(int i=;i<=m;i++)q[i].op=rdn(),q[i].l=rdn(),q[i].r=rdn();
ps=rdn();
int l=,r=n,ans;
while(l<=r)
{
int mid=l+r>>;
if(chk(mid))ans=mid,l=mid+;
else r=mid-;
}
printf("%d\n",ans);
return ;
}
bzoj 4552 [Tjoi2016&Heoi2016]排序——二分答案的更多相关文章
- BZOJ 4552 [Tjoi2016&Heoi2016]排序 | 二分答案 线段树
题目链接 题面 题目描述 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- bzoj 4552 [Tjoi2016&Heoi2016]排序 (二分答案 线段树)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4552 题意: 给你一个1-n的全排列,m次操作,操作由两种:1.将[l,r]升序排序,2 ...
- bzoj 4552: [Tjoi2016&Heoi2016]排序——二分+线段树
Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- BZOJ 4552: [Tjoi2016&Heoi2016]排序
4552: [Tjoi2016&Heoi2016]排序 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 579 Solved: 322[Sub ...
- BZOJ 4552 [Tjoi2016&Heoi2016]排序 ——线段树 二分答案
听说是BC原题. 好题,二分答案变成01序列,就可以方便的用线段树维护了. 然后就是区间查询和覆盖了. #include <map> #include <cmath> #inc ...
- BZOJ 4552: [Tjoi2016&Heoi2016]排序 线段树 二分
目录 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 update 10.6 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 /* //fang zhi ...
- [BZOJ4552][TJOI2016&&HEOI2016]排序(二分答案+线段树/线段树分裂与合并)
解法一:二分答案+线段树 首先我们知道,对于一个01序列排序,用线段树维护的话可以做到单次排序复杂度仅为log级别. 这道题只有一个询问,所以离线没有意义,而一个询问让我们很自然的想到二分答案.先二分 ...
- bzoj 4552: [Tjoi2016&Heoi2016]排序【二分+线段树】
二分值mid,然后把>=mid的赋值为1,其他赋值为0,每次排序就是算出区间内01的个数,然后分别把0和1放到连续的一段内,这些都可以用线段树来维护 二分的判断条件是操作完之后q位置上是否为1 ...
- BZOJ 4552 [Tjoi2016&Heoi2016]排序 线段树的分裂和合并
https://www.lydsy.com/JudgeOnline/problem.php?id=4552 https://blog.csdn.net/zawedx/article/details/5 ...
随机推荐
- IDEA的Tomcat配置Web的项目创建以及Servlet简单运行。
相关软件: 1.IDEA编译器 2.JDK 3.Tomcat (相关软件都可以到官网上下载,老表提示:不要下载最新版本因为不要做试验品) IDEA的安装非常简单,找好安装的盘,n ...
- Metasploit没有db_autopwn命令的解决办法
将附件db_autopwn.rp 拷贝到/opt/framework3/msf3/plugins/PS:db_autopwn.rp 下载地址:http://dl.vmall.com/c04w8czlc ...
- centos7 iptables替换firewall
Disable Firewalld Service. [root@rhel-centos7-tejas-barot-linux ~]# systemctl mask firewalld Stop Fi ...
- Java进阶3. 内存回收机制
Java进阶3. 内存回收机制 20131029 前言: 学过C++的都知道,C++中内存需要程序员自己维护.说道这里,很多开发的同学就感觉很痛苦,当他转向Java的时候,就会说你看Java多好啊,程 ...
- log4j打印不同颜色
1.首先在eclipse中安装一个插件: ANSI COLOR 在Eclipse Marketplace 中直接搜索 ANSI COLOR 然后安装 2.在log4j 中加入红色字体部分: < ...
- vue环境的搭建
一.首先要安装nodejs : 别去官网下,慢的要死,这是国内的什么版本都有.地址 这是我下载的. 然后就傻瓜式安装. 验证是否安装成功 二.node.js的环境变量的新建. //我安装的路径是D: ...
- Java基础学习-包装类
package packaging; /*包装类: 是封装了基本数据类型的类,为了提供更多复杂方法 Integer: String---int 1.intvalue() 2.parseTnt() in ...
- powershell -enc参数无法解码base64编码payload的解决方案
powershell的-enc参数允许传入一个base64编码过的powershell脚本字符串作为参数来执行该powershell脚本,该方法常被用于绕过杀毒软件的主动防御机制. 今天下午在做一个后 ...
- 【跟着stackoverflow学Pandas】Renaming columns in pandas-列的重命名
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- CS231n课程笔记翻译1:Python Numpy教程
译者注:本文智能单元首发,翻译自斯坦福CS231n课程笔记Python Numpy Tutorial,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客翻译完成,Flood Sung ...