听说是BC原题。

好题,二分答案变成01序列,就可以方便的用线段树维护了。

然后就是区间查询和覆盖了。

#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define mp make_pair
#define maxn 200005 int cnt[maxn<<2][2],data[maxn],n,m,a[maxn];
int opt[maxn],x[maxn],y[maxn],tag[maxn<<2],q; void update(int o)
{
F(i,0,1) cnt[o][i]=cnt[o<<1][i]+cnt[o<<1|1][i];
} void build(int o,int l,int r)
{
if (l==r)
{
cnt[o][data[l]]=1;
cnt[o][1-data[l]]=0;
tag[o]=-1;
return ;
}
tag[o]=-1; int mid=l+r>>1;
build(o<<1,l,mid); build(o<<1|1,mid+1,r);
update(o);
} void pushdown(int o,int l,int r)
{
if (tag[o]!=-1)
{
int mid=l+r>>1;
tag[o<<1]=tag[o<<1|1]=tag[o];
cnt[o<<1][tag[o]]=mid-l+1;
cnt[o<<1|1][tag[o]]=r-mid;
cnt[o<<1][1-tag[o]]=0;
cnt[o<<1|1][1-tag[o]]=0;
tag[o]=-1;
}
} int query(int o,int l,int r,int L,int R)
{
if (L<=l&&r<=R) return cnt[o][1];
int mid=l+r>>1; pushdown(o,l,r);
if (R<=mid) return query(o<<1,l,mid,L,R);
else if (L>mid) return query(o<<1|1,mid+1,r,L,R);
else return query(o<<1,l,mid,L,R)+query(o<<1|1,mid+1,r,L,R);
} void modify(int o,int l,int r,int L,int R,int f)
{
if (L>R) return ;
if (L<=l&&r<=R)
{
tag[o]=f;
cnt[o][f]=r-l+1;
cnt[o][1-f]=0;
return;
}
int mid=l+r>>1; pushdown(o,l,r);
if (L<=mid) modify(o<<1,l,mid,L,R,f);
if (R>mid) modify(o<<1|1,mid+1,r,L,R,f);
update(o);
} void st_sort(int typ,int l,int r)
{
int cnt1=query(1,1,n,l,r),cnt0=r-l+1-cnt1;
if (typ==0)
{
modify(1,1,n,l,l+cnt0-1,0);
modify(1,1,n,l+cnt0,r,1);
}
else
{
modify(1,1,n,l,l+cnt1-1,1);
modify(1,1,n,l+cnt1,r,0);
}
} bool check(int mid)
{
F(i,1,n) data[i]=(a[i]>=mid); build(1,1,n);
F(i,1,m)
{
st_sort(opt[i],x[i],y[i]);
}
if (query(1,1,n,q,q)) return true;
else return false;
} int main()
{
scanf("%d%d",&n,&m);
F(i,1,n) scanf("%d",&a[i]);
F(i,1,m) scanf("%d%d%d",&opt[i],&x[i],&y[i]);
int l=1,r=n;scanf("%d",&q);
while(l<r)
{
int mid=(l+r)/2+1;
if (check(mid)) l=mid;
else r=mid-1;
}
printf("%d\n",l);
}

  

BZOJ 4552 [Tjoi2016&Heoi2016]排序 ——线段树 二分答案的更多相关文章

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

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

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

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

  3. BZOJ4552:[TJOI2016&HEOI2016]排序(线段树,二分)

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

  4. [BZOJ 2653] middle(可持久化线段树+二分答案)

    [BZOJ 2653] middle(可持久化线段树+二分答案) 题面 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序 ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. coredata 关系的删除规则

    http://blog.csdn.net/Hello_Hwc/article/details/46375517 关系的删除规则-Delete Rule Deny 关系的destination中只要有一 ...

  2. Mac格式化fat32格式

    好的,格式化硬盘可以使用电脑内置的磁盘工具来格式. 在 LaunchPad 中的 实用工具 或 其它 找到 磁盘工具 打开磁盘工具后,找到你的移动硬盘. (这里以我的希捷移动盘来示例) 非常容易找到, ...

  3. JS Math方法、逻辑

    Math.PI; // 返回 3.141592653589793 Math.round(x) 的返回值是 x 四舍五入为最接近的整数. Math.pow(x, y) 的返回值是 x 的 y 次幂. M ...

  4. bootstrap 超大屏幕(Jumbotron)

    本章将讲解Bootstrap的一个特性:超大屏幕(Jumbonron),顾名思义该组件可以增加标题的大小,并为登录页面的内容添加更多的外边矩. 使用超大屏幕的步骤如下: 1.创建一个还有class.j ...

  5. 吐槽在cocos2dx游戏接入腾讯信鸽的坑

    腾讯信鸽是用来在后台推送消息给移动应用客户端使用,接入方法很简单,在信鸽官网注册个账号 http://xg.qq.com/xg,然后注册一个应用,在后台页面获得ACCESS ID, ACCESS KE ...

  6. 洛谷 P5016 龙虎斗

    输入兵营总数.兵营人数.以m分界. 然后输入s1个兵到了p1兵营. 最终我们要求的是把s2个兵放到哪个兵营使龙虎双方气势差距最小. 第一要把每个兵营的气势算出来,并且加到它所属的阵营里(<m是龙 ...

  7. java--String、StringBuilder、StringBuffer的解析和比较?

    一.String的解析 1.String的含义 ①String是不可以被继承的,String类是final类,String类是由char[]数组来存储字符串. ②String是不可变的字符序列,如果存 ...

  8. Git下的gitignore规则介绍

    匹配模式前/代表项目根目录 匹配模式最后加/代表是目录 匹配模式前加!代表取反 (忽略文件夹,但不忽略文件夹下的某个文件) *代表任意个字符 ? 匹配任意一个字符 **匹配多级目录 node_modu ...

  9. jQuery 淡入淡出有png图的时候 ie8下有黑色边框

    jQuery fadeTo 时ie8 png图片有黑色边框 往带有png图的样式里加 filter:progid:DXImageTransform.Microsoft.AlphaImageLoader ...

  10. paper:synthesizable finit state machine design techniques using the new systemverilog 3.0 enhancements之enhanced coding styles

    1.ANSI style 的代码比较紧凑. 下面规范推荐,比较好. 下面是带有parameter的module header的完整规范 一般1bit ,大家都是wire signal1 = gen_s ...