【BZOJ4552】【TJOI2016】【HEOI2016】排序
经验还是不够……
原题:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int oo=;
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
struct dcd{int mk,x,y;}b[];
int n,m,a[],qst;
int v[],dt[];
int mn=oo,mx=;
void gtsgmttr(int x,int y,int l,int r){
dt[x]=-,v[x]=;
if(l==r){ v[x]=(y>=a[l]); return ;}
int md=(l+r)>>;
gtsgmttr(x<<,y,l,md),gtsgmttr(x<<|,y,md+,r);
v[x]=v[x<<]+v[x<<|];
}
void pshd(int x,int l,int r,int md){
if(dt[x]==-) return ;
v[x<<]=(md-l+)*dt[x],v[x<<|]=(r-md)*dt[x];
dt[x<<]=dt[x<<|]=dt[x];
dt[x]=-;
}
void mdf(int x,int l,int r,int z,int ll,int rr){
if(l>r) return ;
if(l==ll && r==rr){ v[x]=(r-l+)*z,dt[x]=z; return ;}
int md=(ll+rr)>>; pshd(x,ll,rr,md);
if(l<=md && r>md) mdf(x<<,l,md,z,ll,md),mdf(x<<|,md+,r,z,md+,rr);
else if(r<=md) mdf(x<<,l,r,z,ll,md);
else mdf(x<<|,l,r,z,md+,rr);
v[x]=v[x<<]+v[x<<|];
}
int qr(int x,int l,int r,int ll,int rr){
if(l==ll && r==rr) return v[x];
int md=(ll+rr)>>; pshd(x,ll,rr,md);
if(l<=md && r>md) return qr(x<<,l,md,ll,md)+qr(x<<|,md+,r,md+,rr);
else if(r<=md) return qr(x<<,l,r,ll,md);
else return qr(x<<|,l,r,md+,rr);
}
int sch(int x,int y,int ll,int rr){
if(y==ll && y==rr) return v[x];
int md=(ll+rr)>>; pshd(x,ll,rr,md);
if(y<=md) return sch(x<<,y,ll,md);
else return sch(x<<|,y,md+,rr);
}
bool chck(int x){
gtsgmttr(,x,,n);
//cout<<x<<endl;
//for(int i=1;i<=n;++i) printf("%d ",sch(1,i,1,n));
//cout<<endl;
int bwl;
for(int i=;i<=m;++i){
bwl=qr(,b[i].x,b[i].y,,n);
/*if(b[i].mk) mdf(1,b[i].x,b[i].x+bwl-1,0,1,n),mdf(1,b[i].x+bwl,b[i].y,1,1,n);
else mdf(1,b[i].x,b[i].y-bwl,1,1,n),mdf(1,b[i].y-bwl+1,b[i].y,0,1,n);*/
if(b[i].mk) mdf(,b[i].x,b[i].y-bwl,,,n),mdf(,b[i].y-bwl+,b[i].y,,,n);
else mdf(,b[i].x,b[i].x+bwl-,,,n),mdf(,b[i].x+bwl,b[i].y,,,n);
//for(int j=1;j<=n;++j) printf("%d ",sch(1,j,1,n));
//cout<<endl;
}
return sch(,qst,,n);
}
int bnrsch(){
int l=mn,r=mx,md;
while(l+<r) md=(l+r)>>,(chck(md) ? r : l)=md;
return chck(l) ? l : r;
}
int main(){//freopen("ddd.in","r",stdin);
cin>>n>>m;
for(int i=;i<=n;++i) a[i]=rd(),mn=min(mn,a[i]),mx=max(mx,a[i]);
for(int i=;i<=m;++i) b[i].mk=rd(),b[i].x=rd(),b[i].y=rd();
cin>>qst;
cout<<bnrsch()<<endl;
return ;
}
【BZOJ4552】【TJOI2016】【HEOI2016】排序的更多相关文章
- bzoj千题计划128:bzoj4552: [Tjoi2016&Heoi2016]排序
http://www.lydsy.com/JudgeOnline/problem.php?id=4552 二分答案 把>=mid 的数看做1,<mid 的数看做0 这样升序.降序排列相当于 ...
- [BZOJ4552][TJOI2016&&HEOI2016]排序(二分答案+线段树/线段树分裂与合并)
解法一:二分答案+线段树 首先我们知道,对于一个01序列排序,用线段树维护的话可以做到单次排序复杂度仅为log级别. 这道题只有一个询问,所以离线没有意义,而一个询问让我们很自然的想到二分答案.先二分 ...
- BZOJ4552 [Tjoi2016&Heoi2016]排序 【二分 + 线段树】
题目链接 BZOJ4552 题解 之前去雅礼培训做过一道题,\(O(nlogn)\)维护区间排序并能在线查询 可惜我至今不能get 但这道题有着\(O(nlog^2n)\)的离线算法 我们看到询问只有 ...
- [bzoj4552][Tjoi2016][Heoi2016]排序
Description 给出一个$1$到$n$的全排列,现在对这个全排列序列进行$m$次局部排序,排序分为$2$种: $1.(0,l,r)$表示将区间$[l,r]$的数字升序排序; $2.(1,l,r ...
- BZOJ4552: [Tjoi2016&Heoi2016]排序
Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- [bzoj4552][Tjoi2016&Heoi2016]排序-二分+线段树
Brief Description DZY有一个数列a[1..n],它是1∼n这n个正整数的一个排列. 现在他想支持两种操作: 0, l, r: 将a[l..r]原地升序排序. 1, l, r: 将a ...
- BZOJ4552:[TJOI2016&HEOI2016]排序(线段树,二分)
Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他. 这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- 2018.08.01 BZOJ4552: [Tjoi2016&Heoi2016]排序(二分+线段树)
传送门 线段树简单题. 二分答案+线段树排序. 实际上就是二分答案mid" role="presentation" style="position: relat ...
- BZOJ4552 Tjoi2016&Heoi2016排序 【二分+线段树】*
Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这个 ...
- [BZOJ4552][Tjoi2016&Heoi2016]排序(二分答案+线段树)
二分答案mid,将>=mid的设为1,<mid的设为0,这样排序就变成了区间修改的操作,维护一下区间和即可 然后询问第q个位置的值,为1说明>=mid,以上 时间复杂度O(nlog2 ...
随机推荐
- linux:NFS
1.简介 2.安装 安装分为服务端和客户端 [1]我们先拿一台机做服务端 yum install nfs-utils rpcbind -y 然后我们查查看安装没有,查询一个包是否被安装# rpm -q ...
- MySQL 占用cpu 100%
目前的线上数据库,分为主从两个库,从库用来做比较耗时的数据统计分析. 今天top了一下从库服务器,发现mysqld 在很长一段时间都占用105% cpu,一开始以为是从库在处理主库的binlog. 两 ...
- box-shadow 边框阴影
box-shadow: 0 0 20px #000 inset;
- Xilinx FPGA复位逻辑处理小结(转)
Xilinx FPGA复位逻辑处理小结 1. 为什么要复位呢? (1)FPGA上电的时候对设计进行初始化: (2)使用一个外部管脚来实现全局复位,复位作为一个同步信号将所有存储单元设置为一个已知的状态 ...
- L248 词汇题 2006
The audience, hostile at first, were greatly impressed by her excellent performance. He wanted to st ...
- Oracle审计策略例子
首先确保Oracle初始化参数audit_trail值为DB或OS,通过“show parameter audit_trail:”查看. 1 语句审计 audit table by test by a ...
- springsecurity的退出登陆
登陆成功就有退出,退出的实质就是让session失效 要实现退出登录只需要在spring-security配置文件中在加一行代码就可以了 <!--退出登陆--> <security: ...
- python3:利用SMTP协议发送QQ邮件+附件
转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...
- Spring Boot 揭秘与实战(七) 实用技术篇 - 异步任务
文章目录 1. Spring Boot 集成异步任务 2. 单发服务模式 3. 请求应答模式 4. 源代码 Spring 对异步任务具有很好的支持.这篇文章,我们透过 Spring Boot 来讲解下 ...
- EmBitz1.11中将左边的目录弄出来
在view→manager 然后就会出来