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 ...
随机推荐
- PANDAS 数据合并与重塑(concat篇)
转自:http://blog.csdn.net/stevenkwong/article/details/52528616
- nyoj139——康托展开
我排第几个 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说 ...
- 这可能是最详细的 iOS 学习入门指南(含书目/文档/学习资料)
1 零基础小白如何进行 iOS 系统学习 首先,学习目标要明确: 其次,有了目标,要培养兴趣,经常给自己一些正面的反馈,比如对自己的进步进行鼓励,在前期小步快走: 再次,学技术最重要的一点就是多动手. ...
- MySQLdb和PIL安装
最近将个人博客部署到树莓派上海真是颇费周折,尤其是在MySQLdb和PIL的安装上 MySQLdb 先说Windows吧(比较简单) 直接pip安装即可或者下载编译版更方便:http://source ...
- PIVOT 和 UNPIVOT 命令的SQL Server版本
I:使用 PIVOT 和 UNPIVOT 命令的SQL Server版本要求 1.数据库的最低版本要求为 SQL Server 2005 或 更高 2.必须将数据库的兼容级别设置为 90 或 更高 3 ...
- Week12《java程序设计》第12次作业总结
Week12<java程序设计>第12次作业总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 ...
- leetCode之Median of Two Sorted Arrays
[题目描述] There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of ...
- New Concept English three(18)
speed:31w/m 56 words Modern sculpture rarely surprises us any more. The idea that modern art can onl ...
- Flexible 弹性盒子模型之CSS order 属性
实例 设置弹性盒对象元素的顺序: div#myRedDIV {order:2;} div#myBlueDIV {order:4;} div#myGreenDIV {order:3;} div#myPi ...
- HM visual studio编译报错
今天,编译HM的代码,发现编译报如下错误. error MSB6003: The specified task executable "cl.exe" could not be r ...