bzoj 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的更多相关文章
- BZOJ 4552: [Tjoi2016&Heoi2016]排序
4552: [Tjoi2016&Heoi2016]排序 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 579 Solved: 322[Sub ...
- bzoj 4552 [Tjoi2016&Heoi2016]排序 (二分答案 线段树)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4552 题意: 给你一个1-n的全排列,m次操作,操作由两种:1.将[l,r]升序排序,2 ...
- BZOJ 4552 [Tjoi2016&Heoi2016]排序 线段树的分裂和合并
https://www.lydsy.com/JudgeOnline/problem.php?id=4552 https://blog.csdn.net/zawedx/article/details/5 ...
- BZOJ 4552: [Tjoi2016&Heoi2016]排序 线段树 二分
目录 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 update 10.6 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 /* //fang zhi ...
- bzoj 4552 [Tjoi2016&Heoi2016]排序——二分答案
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4552 二分答案,把 >= mid 的设成1.< mid 的设成0,之后排序就变成 ...
- BZOJ 4552 排序
省选TM都能有BC原题? ... #include<iostream> #include<cstdio> #include<cstring> #include< ...
- BZOJ 4552 [Tjoi2016&Heoi2016]排序 | 二分答案 线段树
题目链接 题面 题目描述 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- BZOJ.4552.[HEOI2016/TJOI2016]排序(线段树合并/二分 线段树)
题目链接 对于序列上每一段连续区间的数我们都可以动态开点建一棵值域线段树.初始时就是\(n\)棵. 对于每次操作,我们可以将\([l,r]\)的数分别从之前它所属的若干段区间中分离出来,合并. 对于升 ...
- bzoj 4552: [Tjoi2016&Heoi2016]排序——二分+线段树
Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
随机推荐
- C++持有Object-C对象时容易内存泄露
在IOS项目中,可以将C++与Object-C混编,不过必须放在实现文件.mm中. 在.mm中,我们可能创建了一个C++对象A,而它持有一个Object-C对象B作为成员变量.当A对象被释放掉的时候, ...
- bootstrap-switch
首先需要引入bootstrap的css和js文件,再引入bootstrap-switch.css和bootstrap-switch.js文件 <script type="text/ja ...
- static的局限
static 的缺陷: 1.它只能调用static 变量. 2.它只能调用static方法. 3.不能引用this super 4.static变量在定义时必须初始化,且初始化的时间要早于非静态变量 ...
- 从零搭建SSM框架(一)搭建工程
工程结构 一.cnki-parent 1.新建maven project 2.pom.xml <project xmlns="http://maven.apache.org/POM/ ...
- 当今最流行的Web项目管理工具精选
代码管理 以前各种开源项目的代码都是通过博客和个人网页来发布的.这种分享方式并不是最容易的一种,也不便于他人对代码做出贡献.下面是几个管理项目代码的工具,不管对于个人开发者还是团队开发者来说,它们都是 ...
- ASP.NET 网站部署到IIS上如何进行调试
1:在一个网站成功部署后,有可能会遇到一些错误,但是又不能直接看出错误源(如果能在源程序里下断点进行调试就好了,这样就能准确的找出错误代码),下面介绍如何在一个已经部署的网站上进行断点调试(前提有网站 ...
- 10种CSS3实现的Loading效果
原文链接:http://www.cnblogs.com/jr1993/p/4622039.html 第一种效果: 代码如下: <div class="loading"> ...
- 大规模实时流处理平台架构-zz
随着不同网络质量下接入终端设备种类的增多,服务端转码已经成为视频点播和直播产品中必备的能力之一.直播产品讲究时效性,希望在一定的时间内让所有终端看到不同尺寸甚至是不同质量的视频,因此对转码的实时性要求 ...
- 【codeforces】940F题解
CF Round #466的最后一题,颇有难度,正解是带修改莫队算法. [题意] 给定一个长度为\(n\)的数组\(a\),并且要求执行\(q\)个操作,有两种不同的操作: ①询问一个区间\([l,r ...
- Linux堆内存管理深入分析 (上半部)【转】
转自:http://www.cnblogs.com/alisecurity/p/5486458.html Linux堆内存管理深入分析(上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来 ...