二分答案mid,将>=mid的设为1,<mid的设为0,这样排序就变成了区间修改的操作,维护一下区间和即可

然后询问第q个位置的值,为1说明>=mid,以上

时间复杂度O(nlog2n)

tips: 线段树操作区间[l,r]需满足l<=r,要特判;tag可能为0,要初始化为-1

Code

#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 100010
using namespace std; struct info{int x,l,r;}q[N];
int n,m,A[N],f[N],Ans,Q; inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
} namespace Seg{
#define MID int mid=(l+r)>>1,ls=id<<1,rs=id<<1|1
int tag[N*4];
struct tree{int c[2];}T[N*4];
void pushup(int l,int r,int id){
MID;
T[id].c[0]=T[ls].c[0]+T[rs].c[0];
T[id].c[1]=T[ls].c[1]+T[rs].c[1];
}
void pushdown(int l,int r,int id){
int &tmp=tag[id];
if(tmp==-1)return;
MID;
tag[ls]=tag[rs]=tmp;
T[ls].c[tmp]=mid-l+1,T[ls].c[tmp^1]=0;
T[rs].c[tmp]=r-mid,T[rs].c[tmp^1]=0;
tmp=-1;
}
void build(int l,int r,int id){
if(l==r){
T[id].c[0]=(f[l]==0)?1:0;
T[id].c[1]=T[id].c[0]^1;
return;
}
MID;
build(l,mid,ls),build(mid+1,r,rs);
pushup(l,r,id);
}
int query(int l,int r,int id,int L,int R,int x){
if(L<=l&&r<=R)return T[id].c[x];
pushdown(l,r,id);
MID;
int res=0;
if(L<=mid)res+=query(l,mid,ls,L,R,x);
if(R>mid)res+=query(mid+1,r,rs,L,R,x);
return res;
}
void upd(int l,int r,int id,int L,int R,int x){
if(L<=l&&r<=R){
tag[id]=x;
T[id].c[x]=r-l+1,T[id].c[x^1]=0;
return;
}
pushdown(l,r,id);
MID;
if(L<=mid)upd(l,mid,ls,L,R,x);
if(R>mid)upd(mid+1,r,rs,L,R,x);
pushup(l,r,id);
}
void clr(){memset(tag,-1,sizeof(tag));}
}using namespace Seg; int main(){
n=read(),m=read();
for(int i=1;i<=n;++i)A[i]=read();
for(int i=1;i<=m;++i)q[i].x=read(),q[i].l=read(),q[i].r=read();
Q=read();
for(int l=1,r=n;l<=r;){
int mid=(l+r)>>1;
for(int i=1;i<=n;++i)f[i]=(A[i]>=mid)?1:0;
clr(),build(1,n,1);
for(int i=1;i<=m;++i){
int L=q[i].l,R=q[i].r,x=q[i].x;
int cnt=query(1,n,1,L,R,x);
if(cnt)upd(1,n,1,L,L+cnt-1,x);
if(cnt<(R-L+1))upd(1,n,1,L+cnt,R,x^1);
}
if(query(1,n,1,Q,Q,1)==1) Ans=mid,l=mid+1;
else r=mid-1;
}
printf("%d\n",Ans);
return 0;
}

[BZOJ4552][Tjoi2016&Heoi2016]排序(二分答案+线段树)的更多相关文章

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

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

  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]排序 | 二分答案 线段树

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

  4. 【BZOJ4552】【HEOI2016】排序 [二分答案][线段树]

    排序 Time Limit: 60 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 在2016年,佳媛姐姐喜欢上了数字序列 ...

  5. [bzoj4552][Tjoi2016&Heoi2016]排序-二分+线段树

    Brief Description DZY有一个数列a[1..n],它是1∼n这n个正整数的一个排列. 现在他想支持两种操作: 0, l, r: 将a[l..r]原地升序排序. 1, l, r: 将a ...

  6. bzoj 4552 [Tjoi2016&Heoi2016]排序——二分答案

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4552 二分答案,把 >= mid 的设成1.< mid 的设成0,之后排序就变成 ...

  7. 2018.08.01 BZOJ4552: [Tjoi2016&Heoi2016]排序(二分+线段树)

    传送门 线段树简单题. 二分答案+线段树排序. 实际上就是二分答案mid" role="presentation" style="position: relat ...

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

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

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

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

  10. HDU 5649 DZY Loves Sorting(二分答案+线段树/线段树合并+线段树分割)

    题意 一个 \(1\) 到 \(n\) 的全排列,\(m\) 种操作,每次将一段区间 \([l,r]\) 按升序或降序排列,求 \(m\) 次操作后的第 \(k\) 位. \(1 \leq n \le ...

随机推荐

  1. IE浏览器兼容问题(下)——IE6的常见问题

    IE6常见兼容性问题 1.盒模型问题 (1)DTD问题 DTD:文档定义类型,规定了要遵循的书写规范. 如果不写DTD,高级浏览器还是可以正常加载,IE6会以怪异模式进行加载. 盒模型:正常应该是外扩 ...

  2. PHP实现无限分类

    PHP实现无限分类 无限分类 递归 无限级分类是一种设计技巧,在开发中经常使用,例如:网站目录.部门结构.文章分类.笔者觉得它在对于设计表的层级结构上面发挥很大的作用,比如大家在一些平台上面,填写邀请 ...

  3. git-day1-安装和基础使用

    Git介绍 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件 ...

  4. [原]SDL开发教程

    SDL开发库:http://www.libsdl.org/ SDL中文开发教程:http://tjumyk.github.io/sdl-tutorial-cn/index.html SDL英文版开发教 ...

  5. 全屏轮播插件 fullPage.js应用(基础版兼容IE7, 背景图版兼容IE8)

    /** * fullPage 1.4.5 * https://github.com/alvarotrigo/fullPage.js * MIT licensed * * Copyright (C) 2 ...

  6. Nginx卸载重装问题

    1.删除nginx,-purge包括配置文件 sudo apt-get --purge remove nginx   2.移除全部不使用的软件包 sudo apt-get autoremove   3 ...

  7. hdu1113 Word Amalgamation(详解--map和string的运用)

    版权声明:本文为博主原创文章.未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/35338617 转载请注明出 ...

  8. Gluon Data API

    http://mxnet.apache.org/api/python/gluon/data.html import sys import os import time import mxnet as ...

  9. 【luogu P2491 [SDOI2011]消防】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2491 题外话: OI一共只有三种题--会的题,不会的题,二分题. 题解: step 1 求树的直径,把树的直 ...

  10. Unity 游戏框架搭建 (二十一) 使用对象池时的一些细节

    上篇文章使用SafeObjectPool实现了一个简单的Msg类.代码如下: class Msg : IPoolAble,IPoolType { #region IPoolAble 实现 public ...