4552

思路:

  二分线段树;

代码:

#include <bits/stdc++.h>
using namespace std;
#define maxn 100005
#define maxtree maxn<<2
int val[maxtree],L[maxtree],R[maxtree],mid[maxtree];
int len[maxtree],tag[maxtree],n,ai[maxn],bi[maxn];
int op[maxn],ql[maxn],qr[maxn],q,m;
inline void in(int &now)
{
char Cget=getchar();now=;
while(Cget>''||Cget<'') Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
}
void build(int now,int l,int r)
{
L[now]=l,R[now]=r,len[now]=r-l+,tag[now]=;
if(l==r)
{
val[now]=bi[l];
return;
}
mid[now]=l+r>>,build(now<<,l,mid[now]);
build(now<<|,mid[now]+,r),val[now]=val[now<<]+val[now<<|];
}
void pushdown(int now)
{
if(tag[now]==)
{
tag[now<<]=,tag[now<<|]=;
val[now<<]=,val[now<<|]=;
}
else
{
tag[now<<]=,tag[now<<|]=;
val[now<<]=len[now<<],val[now<<|]=len[now<<|];
}
tag[now]=;
}
void change(int now,int l,int r,int x)
{
if(L[now]>=l&&R[now]<=r)
{
tag[now]=x;
if(x==) val[now]=;
else val[now]=len[now];
return;
}
if(tag[now]) pushdown(now);
if(l<=mid[now]) change(now<<,l,r,x);
if(r>mid[now]) change(now<<|,l,r,x);
val[now]=val[now<<]+val[now<<|];
}
int query(int now,int l,int r)
{
if(L[now]>=l&&R[now]<=r) return val[now];
if(tag[now]) pushdown(now);int res=;
if(l<=mid[now]) res+=query(now<<,l,r);
if(r>mid[now]) res+=query(now<<|,l,r);
return res;
}
bool check(int x)
{
for(int i=;i<=n;i++) bi[i]=(ai[i]>=x);
build(,,n);int tmp;
for(int i=;i<=m;i++)
{
tmp=query(,ql[i],qr[i]);
if(!op[i])
{
if(tmp!=qr[i]-ql[i]+&&tmp) change(,ql[i],qr[i]-tmp,),change(,qr[i]-tmp+,qr[i],);
else if(tmp==qr[i]-ql[i]+) change(,ql[i],qr[i],);
else change(,ql[i],qr[i],);
}
else
{
if(tmp!=qr[i]-ql[i]+&&tmp) change(,ql[i],ql[i]+tmp-,),change(,ql[i]+tmp,qr[i],);
else if(tmp==qr[i]-ql[i]+) change(,ql[i],qr[i],);
else change(,ql[i],qr[i],);
}
}
return query(,q,q);
}
int main()
{
in(n),in(m);
for(int i=;i<=n;i++) in(ai[i]);
for(int i=;i<=m;i++) in(op[i]),in(ql[i]),in(qr[i]);
int l=,r=n,mid,ans;in(q);
while(l<=r)
{
mid=l+r>>;
if(check(mid)) l=mid+,ans=mid;
else r=mid-;
}
cout<<ans;
return ;
}

bzoj 4552的更多相关文章

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

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

  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]排序 线段树的分裂和合并

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

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

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

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

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

  6. BZOJ 4552 排序

    省选TM都能有BC原题? ... #include<iostream> #include<cstdio> #include<cstring> #include< ...

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

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

  8. BZOJ.4552.[HEOI2016/TJOI2016]排序(线段树合并/二分 线段树)

    题目链接 对于序列上每一段连续区间的数我们都可以动态开点建一棵值域线段树.初始时就是\(n\)棵. 对于每次操作,我们可以将\([l,r]\)的数分别从之前它所属的若干段区间中分离出来,合并. 对于升 ...

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

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

随机推荐

  1. GO_05:GO语言基础map与函数

    1. map 1. 类似其它语言中的哈希表活着字典,以 key-value 形式存储数据 2. key 必须是支持 == 或 != 比较运算的类型,不可以是函数.map 或 slice 3. map ...

  2. day1 java基础语法

    一.关键字:java关键字有:abstract boolean break byte case catch char class const continue default do double el ...

  3. VS2010(32bit) + WIN7(64bit) 编译出不同平台程序版本

    一.X86,即一般普通PC上跑的程序版本,不用修改工程属性 二.X64 1.设置工程平台---会在工程目录下生成  X64 文件夹 在工具栏--->生成--->配置管理器 窗口 设置“活动 ...

  4. js加载超时 nginx静态资源

    server { listen ; server_name www.example.com; client_max_body_size 20M; root /xxx/xxx;//项目路径 locati ...

  5. bzoj千题计划147:bzoj1207: [HNOI2004]打鼹鼠

    http://www.lydsy.com/JudgeOnline/problem.php?id=1207 dp[i] 表示打的最后一只鼹鼠是第i只,最多能打多少只鼹鼠 输出max(dp[i]) 错解: ...

  6. MAC 下用 Common Lisp 调试 OpenGL 程序

    MAC 下用 Common Lisp 调试 OpenGL 程序 环境搭建 运行环境: OSX 10.11.3 EI Capitan Common Lisp: SBCL 使用 SBCL, 首先要安装这几 ...

  7. 兼容firefox,ie,谷歌,阻止浏览器冒泡事件,Firefox不支持event解决方法

    兼容firefox,ie,谷歌,阻止浏览器冒泡事件,Firefox不支持event解决方法 // 获取事件function getEvent(){ if(window.event) {return w ...

  8. 希尔密码(Hill Cipher)的实现

    原理应该不用多讲了,自己百度就可以. C++实现: #include <iostream> #include <string> #include <memory.h> ...

  9. tmux终端工具

    本文原始地址:http://www.cnblogs.com/chinas/p/7094172.html,转载请注明出处,谢谢!!! 1.介绍 tmux(终端复用工具):一个很有趣的工具,类似GNU S ...

  10. markdown小记(语法+markdownpad)

    一.有道云笔记markdown语法小记 1.目录[TOC] 2.标题# 一级标题## 二级标题...###### 六级标题 3.项目列表有序列表: 1. 1. (显示为i.) 2. 3. - (显示为 ...