BZOJ 2653: middle [主席树 中位数]
题意:
最后一句话太可怕了$QAQ$
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define lc t[x].l
#define rc t[x].r
#define mid ((l+r)>>1)
#define lson t[x].l,l,mid
#define rson t[x].r,mid+1,r
typedef long long ll;
const int N=2e4+,INF=1e9;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
}
int n,Q;
struct Number{
int v,id;
bool operator <(const Number &r)const{return v<r.v;}
}s[N];
struct Node{
int l,r,lm,rm,sum;
Node(){}
Node(int a,int b,int c):lm(a),rm(b),sum(c){}
}t[N*];
int sz,root[N];
inline void merge(int x){
t[x].sum=t[lc].sum+t[rc].sum;
t[x].lm=max(t[lc].lm,t[lc].sum+t[rc].lm);
t[x].rm=max(t[rc].rm,t[rc].sum+t[lc].rm);
}
Node operator +(Node a,Node b){
Node re;
re.sum=a.sum+b.sum;
re.lm=max(a.lm,a.sum+b.lm);
re.rm=max(b.rm,b.sum+a.rm);
return re;
}
void segCha(int &x,int l,int r,int p,int v){
t[++sz]=t[x];x=sz;
if(l==r) t[x].sum=t[x].lm=t[x].rm=v;
else{
if(p<=mid) segCha(lson,p,v);
else segCha(rson,p,v);
merge(x);
}
}
Node segQue(int x,int l,int r,int ql,int qr){
if(ql>qr) return Node(,,);
if(ql<=l&&r<=qr) return t[x];
else{
if(qr<=mid) return segQue(lson,ql,qr);
if(mid<ql) return segQue(rson,ql,qr);
return segQue(lson,ql,qr)+segQue(rson,ql,qr);
}
}
void build(int &x,int l,int r){
t[++sz]=t[x];x=sz;
if(l==r) t[x].sum=t[x].lm=t[x].rm=;
else{
build(lson);
build(rson);
merge(x);
}
}
int a,b,c,d,q[];
int Query(int g){
int x=root[g];
return segQue(x,,n-,a,b).rm+segQue(x,,n-,b+,c-).sum+segQue(x,,n-,c,d).lm;
}
int main(){
freopen("in","r",stdin);
n=read();
for(int i=;i<n;i++) s[i].v=read(),s[i].id=i;
sort(s,s+n);
build(root[],,n-);
for(int i=;i<n;i++) root[i]=root[i-],segCha(root[i],,n-,s[i-].id,-); int last=;
Q=read();//int debug=0;
while(Q--){//printf("debug %d\n",++debug);
for(int i=;i<=;i++) q[i]=(read()+last)%n;
sort(q+,q++);
a=q[];b=q[];c=q[];d=q[];
//printf("abcd %d %d %d %d\n",a,b,c,d);
int l=,r=n-,ans=;
while(l<=r){
int mi=(l+r)>>;
if(Query(mi)>=) ans=mi,l=mi+;
else r=mi-;
}
last=s[ans].v;
printf("%d\n",last);
}
}
BZOJ 2653: middle [主席树 中位数]的更多相关文章
- bzoj 2653: middle (主席树+二分)
2653: middle Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2522 Solved: 1434[Submit][Status][Disc ...
- bzoj 2653 middle(主席树)
题面:https://vjudge.net/problem/HYSBZ-2653 博客:https://blog.csdn.net/litble/article/details/78984846 这个 ...
- BZOJ 2653: middle(主席树+二分答案)
传送门 解题思路 首先可以想到一种暴力做法,就是询问时二分,然后大于等于这个值的设为1,否则设为-1,然后就和GSS1那样统计答案.但是发现这样时间空间复杂度都很爆炸,所以考虑预处理,可以用主席树来做 ...
- BZOJ 2653: middle 主席树 二分
https://www.lydsy.com/JudgeOnline/problem.php?id=2653 因为是两个方向向外延伸所以不能对编号取前缀和(这里只有前缀和向后传递的性质,不是实际意义的和 ...
- BZOJ 2653 middle | 主席树
题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2653 题解: 设答案为ans,把大于等于ans的记为1,小于的记为-1,这样可以知道当前an ...
- [BZOJ 2653] middle(可持久化线段树+二分答案)
[BZOJ 2653] middle(可持久化线段树+二分答案) 题面 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序 ...
- bzoj 2653 middle 二分答案 主席树判定
判断中位数是否可行需要将当前的解作为分界,大于其的置为1,小于为-1,然后b-c必选,ab,cd可不选,这个用线段树判定就好 但不能每次跑,所以套主席树,按权值排序,构建主席树,更新时将上一个节点改为 ...
- BZOJ 2653 middle 二分答案+可持久化线段树
题目大意:有一个序列,包含多次询问.询问区间左右端点在规定区间里移动所得到的最大中位数的值. 考虑对于每个询问,如何得到最优区间?枚举显然是超时的,只能考虑二分. 中位数的定义是在一个序列中,比中位数 ...
- [BZOJ2653]middle 主席树+二分
2653: middle Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2042 Solved: 1123[Submit][Status][Disc ...
随机推荐
- 自己编写JavaScript的sort函数
在平常开发中我们经常会遇到对数组进行排序的场景,js给我们提供了sort方法可以对数组元素进行排序,默认是按ASCII字母表顺序排序,请看下面例子: var a = [1, 3, 2, 4];var ...
- 如何利用vue和php做前后端分离开发?
新手上路,前端工程师,刚毕业参加工作两个月,上面让我用vue搭建环境和php工程师一起开发,做前后端分离,然而我只用过简单的vue做一些小组件的经验,完全不知道怎样和php工程师配合,ps: php那 ...
- Ubuntu问题:E45: 'readonly' option is set (add ! to override)错误解决
问题描述:E45: 'readonly' option is set (add ! to override) 问题分析:该错误为当前用户没有权限对文件作修改 问题解决: 输入 :w !sudo tee ...
- protobuf java基础
1:定义proto文件: 以一个地址薄为例,从建立一个.proto文件开始,为需要序列化的数据接口加入一个message属性,在message里面,为每一个字段指定名称和类型(算是IDL吧),如下 ...
- Linux IO时事检测工具iostat
Linux IO时事检测工具iostat iostat命令用于检测linux系统io设备的负载情况,运行iostat将显示自上次运行该命令以后的统计信息.用户可以通过指定统计的次数和时间来获得所需的统 ...
- Python解析JSON详解
JSON 函数 使用 JSON 函数需要导入 json 库:import json. 函数 描述 json.dumps 将 Python 对象编码成 JSON 字符串 json.loads 将已 ...
- sql 查询 ORA-12170 TNS 连接超时特殊原因
一般对于ORA-12170这个问题 1 看数据ip 是否能ping通 2 数据库服务是否启动 3 数据库服务所在服务器防火墙 然而当你能进去数据,而报这个这错时: 1 看代码中数据库连接是写错 2 如 ...
- java—— finall 关键词
_ *{ margin: 0; padding: 0; } .on2{ margin: 10px 0; cursor: pointer; user-select: none; color: white ...
- SpringMVC之GET请求参数中文乱码
server.xml 文件中的编码过滤器设置是针对POST请求的,tomacat对GET和POST请求处理方式是不同的,要处理针对GET请求的编码问题,则需要改tomcat,conf目录下的serve ...
- tomcat server.xml context path配置需要注意的事情
在tomcat下放个war包,假如我是这样配置server.xml的,<Context docBase="eggchina" path="/yanan" ...