BZOJ 4552 排序
省选TM都能有BC原题?
。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100500
#define inf 1000000007
using namespace std;
int n,m,a[maxn],l=inf,r=,mi,q;
int ls[maxn<<],rs[maxn<<],lazy[maxn<<],sum[maxn<<],root,tot=;
int pos[maxn],ans;
struct move
{
int type,l,r;
}p[maxn];
void build(int &now,int left,int right)
{
now=++tot;lazy[now]=-;
if (left==right)
{
pos[left]=now;
if (a[left]>=mi) {lazy[now]=;sum[now]=;}
else {lazy[now]=;sum[now]=;}
return;
}
int mid=(left+right)>>;
build(ls[now],left,mid);
build(rs[now],mid+,right);
sum[now]=sum[ls[now]]+sum[rs[now]];
}
void pushdown(int now,int left,int right)
{
if (lazy[now]==-) return;
if (left==right) return;
int mid=(left+right)>>;
if (lazy[now]==)
{
lazy[ls[now]]=;sum[ls[now]]=;
lazy[rs[now]]=;sum[rs[now]]=;
}
else
{
lazy[ls[now]]=;sum[ls[now]]=mid-left+;
lazy[rs[now]]=;sum[rs[now]]=right-mid;
}
lazy[now]=-;
}
int query(int now,int left,int right,int l,int r)
{
pushdown(now,left,right);
if ((left==l) && (right==r))
return sum[now];
int mid=(left+right)>>;
if (r<=mid) return query(ls[now],left,mid,l,r);
else if (l>=mid+) return query(rs[now],mid+,right,l,r);
else return query(ls[now],left,mid,l,mid)+query(rs[now],mid+,right,mid+,r);
}
void modify(int now,int left,int right,int l,int r,int p)
{
pushdown(now,left,right);
if ((left==l) && (right==r))
{
lazy[now]=p;
if (p==) sum[now]=;
else sum[now]=right-left+;
return;
}
int mid=(left+right)>>;
if (r<=mid) modify(ls[now],left,mid,l,r,p);
else if (l>=mid+) modify(rs[now],mid+,right,l,r,p);
else
{
modify(ls[now],left,mid,l,mid,p);
modify(rs[now],mid+,right,mid+,r,p);
}
sum[now]=sum[ls[now]]+sum[rs[now]];
}
void work0(int x)
{
int len=p[x].r-p[x].l+,lenr=query(root,,n,p[x].l,p[x].r);
if (p[x].l<=p[x].l+(len-lenr)-) modify(root,,n,p[x].l,p[x].l+(len-lenr)-,);
if (p[x].l+(len-lenr)<=p[x].r) modify(root,,n,p[x].l+(len-lenr),p[x].r,);
}
void work1(int x)
{
int len=p[x].r-p[x].l+,lenl=query(root,,n,p[x].l,p[x].r);
if (p[x].l<=p[x].l+lenl-) modify(root,,n,p[x].l,p[x].l+lenl-,);
if (p[x].l+lenl<=p[x].r) modify(root,,n,p[x].l+lenl,p[x].r,);
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
{
scanf("%d",&a[i]);
l=min(l,a[i]);
r=max(r,a[i]);
}
for (int i=;i<=m;i++)
scanf("%d%d%d",&p[i].type,&p[i].l,&p[i].r);
scanf("%d",&q);
while (l<=r)
{
tot=;
mi=(l+r)>>;
build(root,,n);
for (int i=;i<=m;i++)
{
if (p[i].type==) work0(i);
else work1(i);
}
int regis=query(root,,n,q,q);
if (regis==) {ans=mi;l=mi+;}
else r=mi-;
}
printf("%d\n",ans);
return ;
}
BZOJ 4552 排序的更多相关文章
- BZOJ 4552 排序 Heoi2016
记得当年省选的时候 这道题连暴力都没写对(尴尬ing) (当年天真的认为sort是左闭右闭的hhhhhh) 思路: 首先 二分答案 线段树 首先二分答案,然后需要知道进行m次排序后p位置上的数字是否大 ...
- 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]排序——二分答案
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4552 二分答案,把 >= mid 的设成1.< mid 的设成0,之后排序就变成 ...
- BZOJ 4552 [Tjoi2016&Heoi2016]排序 | 二分答案 线段树
题目链接 题面 题目描述 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- BZOJ 4552: [Tjoi2016&Heoi2016]排序 线段树 二分
目录 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 update 10.6 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 /* //fang zhi ...
- bzoj 4552: [Tjoi2016&Heoi2016]排序——二分+线段树
Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- 排序(bzoj 4552)
Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
随机推荐
- swfObject 使用说明
1.Embed your SWF with JavaScript 使用方法 swfobject.embedSWF(swfUrl, id, width, height, version, expres ...
- 收集几个Web前端UI框架
原文:http://www.isaced.com/post-200.html 关于Web前端UI库/框架,我觉得是非常方便的东西,对于我们这种业余的Web开发人员,有时候要写点前端代码的时候把UI框架 ...
- iOS自定义发送消息输入框
简单的封装了一个,免得麻烦直接初始化就可以用了 ,有其他需求该里面参数就行了 WJEasyInputTextView.h , CGRectGetHeight([UIScreen mainScreen] ...
- Android Handler的使用
大家好我们这一节讲的是Android Handler的使用,在讲Handler之前,我们先提个小问题,就是如何让程序5秒钟更新一下Title. 首先我们看一下习惯了Java编程的人,在不知道Handl ...
- VS2010 Notes
1.fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 VS2010在经历一些更新后,建立Win32 Console Project时会出“error LNK112 ...
- 传说中的WCF(10):消息拦截与篡改
我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过 程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过 ...
- poj 3613(经过N条边的最短路)
题目链接:http://poj.org/problem?id=3613 思路:我们知道如果矩阵A表示经过1条边的方案数,那么A^N矩阵就代表这经过N条边的方案数,而本题中要求经过N条边的最短距离,于是 ...
- js正则表达式用法大全
匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用来计算字符串的长度(一 ...
- 李洪强漫谈iOS开发[C语言-043]-判断较早日期
李洪强漫谈iOS开发[C语言-043]-判断较早日期
- 欧拉工程第56题:Powerful digit sum
题目链接 Java程序 package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; im ...