太棒了!思路很不错。

没想到HEOID1三道线段树。

这题我们可以二分答案,将小于他的在线段树中设成0,大于他的设成1然后模拟操作复杂度O(mlog^2n)

By:大奕哥

 #include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
struct node
{
int l,s,lz;
}t[N<<];
int n,m,a[N],p;
struct que
{
int f,l,r;
}q[N];
void build(int p,int l,int r)
{
if(l==r){
t[p].l=;return;
}
int mid=l+r>>;t[p].l=r-l+;
build(p<<,l,mid);build(p<<|,mid+,r);
}
void pushdown(int p)
{
if(t[p].lz)
{
if(t[p].lz==)t[p<<].s=t[p<<].l,t[p<<|].s=t[p<<|].l;
if(t[p].lz==-)t[p<<].s=t[p<<|].s=;
t[p<<].lz=t[p<<|].lz=t[p].lz;t[p].lz=;
}
}
int query(int p,int l,int r,int L,int R)
{
if(l==L&&r==R)return t[p].s;
int mid=l+r>>;pushdown(p);
if(mid>=R)return query(p<<,l,mid,L,R);
else if(L>mid)return query(p<<|,mid+,r,L,R);
else return query(p<<,l,mid,L,mid)+query(p<<|,mid+,r,mid+,R);
}
void change(int p,int l,int r,int L,int R,int w)
{
if(L>R)return;
if(l==L&&r==R)
{
if(w)t[p].s=t[p].l,t[p].lz=;else t[p].s=,t[p].lz=-;return;
}
int mid=l+r>>;pushdown(p);
if(mid>=R)change(p<<,l,mid,L,R,w);
else if(L>mid)change(p<<|,mid+,r,L,R,w);
else change(p<<,l,mid,L,mid,w),change(p<<|,mid+,r,mid+,R,w);
t[p].s=t[p<<].s+t[p<<|].s;
}
bool check(int x)
{
for(int i=;i<=n;++i)
{
if(a[i]<x)change(,,n,i,i,);
else change(,,n,i,i,);
}
for(int i=;i<=m;++i)
{
int tmp=query(,,n,q[i].l,q[i].r);
if(q[i].f)
{
change(,,n,q[i].l,q[i].l+tmp-,);
change(,,n,q[i].l+tmp,q[i].r,);
}
else
{
change(,,n,q[i].r-tmp+,q[i].r,);
change(,,n,q[i].l,q[i].r-tmp,);
}
}
return query(,,n,p,p);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)scanf("%d",&a[i]);
for(int i=;i<=m;++i)scanf("%d%d%d",&q[i].f,&q[i].l,&q[i].r);
scanf("%d",&p);
int ans,l=,r=n;
build(,,n);
while(l<=r)
{
int mid=l+r>>;
if(check(mid))ans=mid,l=mid+;
else r=mid-;
}
printf("%d",ans);
return ;
}

BZOJ4552 HEOI2016排序的更多相关文章

  1. 【BZOJ4552】[Tjoi2016&Heoi2016]排序 二分+线段树

    [BZOJ4552][Tjoi2016&Heoi2016]排序 Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ...

  2. bzoj千题计划128:bzoj4552: [Tjoi2016&Heoi2016]排序

    http://www.lydsy.com/JudgeOnline/problem.php?id=4552 二分答案 把>=mid 的数看做1,<mid 的数看做0 这样升序.降序排列相当于 ...

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

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

  4. 【BZOJ4552】排序(线段树,二分答案)

    [BZOJ4552]排序(线段树,二分答案) 题面 BZOJ 题解 好神的题啊 直接排序我们做不到 怎么维护? 考虑一下,如果我们随便假设一个答案 怎么检验它是否成立? 把这个数设成\(1\),其他的 ...

  5. [Tjoi2016&Heoi2016]排序[01序列]

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

  6. 4552: [Tjoi2016&Heoi2016]排序

    4552: [Tjoi2016&Heoi2016]排序 链接 分析: 因为只询问一次,所以考虑二分这个数.显然是没有单调性的,但是我们可以二分所有大于等于mid的数中,是否有满足条件的x(而不 ...

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

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

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

    题目链接 BZOJ4552 题解 之前去雅礼培训做过一道题,\(O(nlogn)\)维护区间排序并能在线查询 可惜我至今不能get 但这道题有着\(O(nlog^2n)\)的离线算法 我们看到询问只有 ...

  9. [bzoj4552][Tjoi2016][Heoi2016]排序

    Description 给出一个$1$到$n$的全排列,现在对这个全排列序列进行$m$次局部排序,排序分为$2$种: $1.(0,l,r)$表示将区间$[l,r]$的数字升序排序; $2.(1,l,r ...

随机推荐

  1. SDUT 3929

    Description 蓝色空间号和万有引力号进入了四维水洼,发现了四维物体--魔戒. 这里我们把飞船和魔戒都抽象为四维空间中的一个点,分别标为 "S" 和 "E&quo ...

  2. 【洛谷 P2764】 最小路径覆盖问题(最大流)

    题目链接 首先有\(n\)条路径,每条路径就是一个点,然后尽量合并,答案就是点数-合并数. 套路拆点,源连入,出连汇,原有的边入出连. 最大流就是最大合并数,第一问解决. 然后怎么输出方案? 我是找到 ...

  3. 阿里iconfont引入方法

    原文:iconfont的引入方法   第一步:使用font-face声明字体@font-face {font-family: 'iconfont';src: url('iconfont.eot'); ...

  4. C#里面中将字符串转为变量名

    public partial class Form1 : Form { string str = "spp"; public string spp = "very goo ...

  5. King's Quest POJ - 1904 匈牙利算法的思想+tarjan缩点+染色

    题目链接:https://cn.vjudge.net/problem/POJ-1904 自己一开始的想法,打算用匈牙利算法实现,找二分图的最大匹配.但是打了打发现,不太好实现.原因如下:匈牙利算法是不 ...

  6. 64_p9

    python2-termcolor-1.1.0-11.fc26.noarch.rpm 12-Feb-2017 14:05 13610 python2-terminado-0.6-2.fc26.noar ...

  7. 64_p2

    perl-Class-XSAccessor-1.19-10.fc26.x86_64.rpm 12-Feb-2017 15:12 48098 perl-Clipboard-0.13-16.fc26.no ...

  8. C# 怎么显示中文格式的日期、星期几

    //该语句显示的为英文格式DateTime.Now.DayOfWeek.ToString(); //显示中文格式星期几 "星期" + DateTime.Now.ToString(& ...

  9. 制作一棵ztree

    我们在做web项目时,常会用到一些树形菜单.在此,我们利用ztree实现树形菜单的效果.zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTr ...

  10. Delphi 绘图对象

    来自:http://blog.csdn.net/lailai186/article/details/8755430 ========================================== ...