【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 ...
随机推荐
- U帮忙U盘启动盘制作
第一步:制作U盘启动盘前的软.硬件准备 1.准备一个U盘或内存卡(尽量使用2G以上的) 2.进入 U帮忙官网 下载最新版U盘启动盘制作工具! 3.搜索并下载ghost版系统文件存放到电脑中. 第二步: ...
- js的event.preventDefault()与event.stopPropagation()
event.preventDefault()用法介绍 该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作).例如,如果 type 属性是 "submit" ...
- Spring框架基本代码
1.准备阶段: 2.基本引入: 接口: package com.xk.spring.kp01_hello; public interface IHello { public void nice(); ...
- 【JAVA多线程】interrupted() 和 isInterrupted() 的区别
Thread 类中提供了两种方法用来判断线程的状态是不是停止的.就是我们今天的两位主人公 interrupted() 和 isInterrupted() . interrupted() 官方解释:测试 ...
- DevExpress WinForms v18.2新版亮点(二)
行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WinForms v1 ...
- http协议相关
HTTP请求方法 HTTP消息头 HTTP请求头 HTTP响应头 HTTP cookie机制和实现原理 HTTP请求方法 超文本传输协议(HTTP, HyperText Transfer Protoc ...
- YLZ开发外网前端
YLZ外网前端使用的是boottstrap和layer和validform等插件 表格是用boottstrap的tablle加上框架人员开发的ajaxpageresponse进行协调开发 弹窗使用的l ...
- Python 基础list 增删改查 解析
一 增加 1 append 增加到最后一个列表 li = [ 1,3,4 ,'wang',]li.append('wangyan')print(li)[1, 3, 4, 'wang' ...
- Vuejs 用$emit 与 $on 来进行兄弟组件之间的数据传输
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 新建react项目
npm install -g create-react-app create-react-app my-app cd my-app npm start