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 ...
随机推荐
- [oracle原]访问局域网内出现“ORA-12541:TNS:无监听程序”
近日在服务器局域网内27电脑上安装了oracle11g,本机上访问此数据库正常.但在局域网内其它机器上访问27上的数据库时,出现“ORA-12541:TNS:无监听程序”错误. 查27上的配置:D:\ ...
- 重新学习MySQL数据库2:『浅入浅出』MySQL 和 InnoDB
重新学习Mysql数据库2:『浅入浅出』MySQL 和 InnoDB 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL.P ...
- yum离线安装
安装yum-plugin-downloadonly插件 yum install -y yum-plugin-downloadonly 下载对应的软件包,我们以mysql为例,终端输入如下命令 yum ...
- Personal Introduction
专业:计算机科学与技术 我是博客园的新人,虽然接触编程世界只有一年,基础知识比较差,编程能力差,但对于这个专业,我还是充满兴趣,希望有一天能独当一面,从今天起,我将分享一些在学习web前端和其他方面的 ...
- LeetCode OJ:Word Pattern(单词模式)
Given a pattern and a string str, find if str follows the same pattern. Here follow means a full mat ...
- gradle 删除指定目录中的文件和目录
// 删除bakAPk下的所有非母包文件 task deleTask(type: Delete){ FileTree tree = fileTree(dir: bakPath) tree.each { ...
- CRect类 的介绍
类CRect是对Windows结构RECT的封装,凡是能用RECT结构的地方都可以用CRect代替. 结构RECT表示一个矩形的位置和尺寸,其定义为: typedef struct tagRECT{ ...
- 一名十年Java程序员回忆阿里面试经历——揭开阿里面试的“遮羞布”
阿里面试经历 去阿里面试可以说非常非常的偶然和戏剧性,因为本人根本没投简历,以至于阿里hr给我电话的时候我一度认为是诈骗电话.因为深圳这家公司不错我还想在这里干个两年左右再考虑考虑. 这个时候的本人已 ...
- 解决TensorFlow最新代码编译错误问题
老是有个习惯,看到开源代码更新了,总是想更新到最新版,如果置之不理的话,就感觉自己懒惰了或有的不负责任了,这个也可能是一种形式的强迫症吧: 前几天晚上git pull TensorFlow,完事后也没 ...
- 【剑指offer】不使用除法,构建乘积数组,C++实现
# 题目 # 思路 设C[i] = A[0] * A[1] * - * A[i-1],D[i] = A[i+1] * - * A[n-1],则C[i]按照从上到下的顺序计算,即C[i] = C[i- ...