题目: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]排序——二分答案的更多相关文章

  1. BZOJ 4552 [Tjoi2016&Heoi2016]排序 | 二分答案 线段树

    题目链接 题面 题目描述 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...

  2. bzoj 4552 [Tjoi2016&Heoi2016]排序 (二分答案 线段树)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4552 题意: 给你一个1-n的全排列,m次操作,操作由两种:1.将[l,r]升序排序,2 ...

  3. bzoj 4552: [Tjoi2016&Heoi2016]排序——二分+线段树

    Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...

  4. BZOJ 4552: [Tjoi2016&Heoi2016]排序

    4552: [Tjoi2016&Heoi2016]排序 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 579  Solved: 322[Sub ...

  5. BZOJ 4552 [Tjoi2016&Heoi2016]排序 ——线段树 二分答案

    听说是BC原题. 好题,二分答案变成01序列,就可以方便的用线段树维护了. 然后就是区间查询和覆盖了. #include <map> #include <cmath> #inc ...

  6. BZOJ 4552: [Tjoi2016&Heoi2016]排序 线段树 二分

    目录 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 update 10.6 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 /* //fang zhi ...

  7. [BZOJ4552][TJOI2016&&HEOI2016]排序(二分答案+线段树/线段树分裂与合并)

    解法一:二分答案+线段树 首先我们知道,对于一个01序列排序,用线段树维护的话可以做到单次排序复杂度仅为log级别. 这道题只有一个询问,所以离线没有意义,而一个询问让我们很自然的想到二分答案.先二分 ...

  8. bzoj 4552: [Tjoi2016&Heoi2016]排序【二分+线段树】

    二分值mid,然后把>=mid的赋值为1,其他赋值为0,每次排序就是算出区间内01的个数,然后分别把0和1放到连续的一段内,这些都可以用线段树来维护 二分的判断条件是操作完之后q位置上是否为1 ...

  9. BZOJ 4552 [Tjoi2016&Heoi2016]排序 线段树的分裂和合并

    https://www.lydsy.com/JudgeOnline/problem.php?id=4552 https://blog.csdn.net/zawedx/article/details/5 ...

随机推荐

  1. Truncate a string

    用瑞兹来截断对面的退路! 截断一个字符串! 如果字符串的长度比指定的参数num长,则把多余的部分用...来表示. 切记,插入到字符串尾部的三个点号也会计入字符串的长度. 但是,如果指定的参数num小于 ...

  2. h5开发中,利用微信或者QQ登陆以后获取用户头像在canvas画布显示问题

    在实际开发上先的h5页面产品中,总会遇到各种坑,好多坑都是安卓和iPhone端兼容的问题(用电脑谷歌浏览器输入  chrome://inspect/#devices可以用手机USB调试,打开) eg: ...

  3. 【javascript基础】函数前面的一元操作符

    在函数前面加:+  ;  ~ !  - 等等一元操作符,javascript 引擎都会将后面的statement转换成表达式(expression),这样就可以调用了.

  4. Python程序员不完全指南

    Python 基础 Python基础 基础数据类型 深浅copy 文件操作 函数 初识函数 函数进阶 装饰器函数 迭代器和生成器 各种推导式 递归函数 内置函数和匿名函数 异常处理 常用模块 模块和包 ...

  5. 访问IO设备

    http://blog.csdn.net/goodluckwhh/article/details/16986871 内存屏障主要解决的问题是编译器的优化和CPU的乱序执行.编译器在优化的时候,生成的汇 ...

  6. JMter压力测试

    一. 压力测试场景设置 一般我们在做压力测试的时候,分单场景和混合场景,单场景也就是咱们压测单个接口的时候,多场景也就是有业务流程的情况下,比如说一个购物流程,那么这样的场景就是混合场景,就是有多个接 ...

  7. HDU 1374

    http://acm.hdu.edu.cn/showproblem.php?pid=1374 已知三点坐标,求三点确定的圆的周长 #include <iostream> #include ...

  8. SAPUI5使用了哪些开源技术

    我们知道SAP UI5已经开源了,共享给了Apache开源组织后的名字叫Open UI5,虽然从API的长度上看,Open UI5比SAP UI5要短,但是两者的核心并没有多大区别,SAP UI5多了 ...

  9. QUnit使用

    什么是单元测试 每个单元测试就是一段用于测试一个模块或接口是否能达到预期结果的代码. QUnitjs 概念Qunit是一款强大的用于帮助调试代码的,JavaScript单元测试框架.是jQuery的官 ...

  10. [Python]定时任务框架 APScheduler

    1.使用APScheduler教程 参考博客地址