bzoj2653: middle

bzoj 2653: middle(陈立杰) 首先膜拜clj。。。 这道题初看没头绪,看了诸多题解后,发现时先二分,在把大于等于它的为1,小于它的为-1,一段区间最大连续和非负就行 然后想了N久都没想通,终于,在昨天在外拜年时想通了,就是以每个数建可持久化线段树,然后维护sum,lsum,rsum这样初始化就nlogn,每次询问log2n,总复杂度O(Qlog2n+nlongn);代码写得还是蛮短的,就是怎么搞都只是rank 6。。。 阅读详情

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2653

思路:陈老师的题

可持久化线段树的又一种应用

对于每次询问,二分答案

我们怎么知道它是大于中位数还是小于中位数呢?

我们把每个小于它的赋成-1,大于等于赋为1

查询左端点在[a,b]右端点在[c,d]的区间的最大子段和

若小于0,则偏大,大于等于0,偏小或者正好

我们建立n棵权值线段树,从小到大把该数对应位置从1变为-1,维护左起/右起最大字段和,区间sum

但空间开不下,改成可持久化版即可

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
const int maxn=20010,maxt=400010,inf=0x7f7f7f7f;
using namespace std;
int n,Q,lastans=0,q[4],root[maxn];char ch;
void read(int &x){
	for (ch=getchar();!isdigit(ch);ch=getchar());
	for (x=0;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
}

struct data{
	int v,id;
	void init(int i){read(v),id=i;}
}seq[maxn];
bool cmp(data a,data b){return a.v<b.v;}
struct node{
	int lmax,rmax,sum;
	void assign(int v){lmax=rmax=sum=v;}
};

node merge(const node &a,const node &b){
	node res;
	res.lmax=max(a.lmax,a.sum+b.lmax);
	res.rmax=max(b.rmax,b.sum+a.rmax);
	res.sum=a.sum+b.sum;
	return res;
}

struct Tsegment{
	#define ls ch[p][0]
	#define rs ch[p][1]
	#define mid ((l+r)>>1)
	node t[maxt];int tot,ch[maxt][2];
	inline void update(int p){t[p]=merge(t[ls],t[rs]);}
	void build(int &p,int l,int r){
		p=++tot;
		//printf("p=%d l=%d r=%d\n",p,l,r);
		if (l==r){t[p].assign(1);return;}
		build(ls,l,mid),build(rs,mid+1,r),update(p);
		//printf("p=%d ls=%d rs=%d\n",p,ls,rs);
	}
	void modify(int pre,int &p,int l,int r,int x){
		p=++tot;//printf("%d %d %d %d %d\n",pre,p,l,r,x);
		if (l==r){t[p].assign(-1);return;}
		if (x<=mid) rs=ch[pre][1],modify(ch[pre][0],ls,l,mid,x);
		else ls=ch[pre][0],modify(ch[pre][1],rs,mid+1,r,x);
		update(p);
	}
	
	node query(int p,int l,int r,int a,int b){
		if (l==a&&r==b) return t[p];
		if (b<=mid) return query(ls,l,mid,a,b);
		else if (a>mid) return query(rs,mid+1,r,a,b);
		else return merge(query(ls,l,mid,a,mid),query(rs,mid+1,r,mid+1,b));
	}
	node query(int ver,int l,int r){if (l>r) return (node){-inf,-inf,0};return query(root[ver],1,n,l,r);}
	void modify(int ver,int pos){modify(root[ver-1],root[ver],1,n,pos);}
	#undef mid
}T;

bool check(int id){
	return T.query(id,q[0],q[1]).rmax+T.query(id,q[1]+1,q[2]-1).sum+T.query(id,q[2],q[3]).lmax>=0;
}

void init(){
	scanf("%d",&n);
	for (int i=1;i<=n;i++) seq[i].init(i);
	sort(seq+1,seq+1+n,cmp);
	T.build(root[1],1,n);
	for (int i=1;i<=n;i++)T.modify(i+1,seq[i].id);// printf("root=%d\n",root[i]),
}

void getans(){
	int l=1,r=n,mid=(l+r)>>1,ans=1;
	while (l<=r){
		if (check(mid)) ans=mid,l=mid+1;
		else r=mid-1;
		mid=(l+r)>>1;
	}
	printf("%d\n",seq[ans].v);
	lastans=seq[ans].v;
}

void work(){
	scanf("%d",&Q);
	for (int i=1;i<=Q;i++){
		for (int j=0;j<4;j++)
			read(q[j]),q[j]=(q[j]+lastans)%n+1;
		sort(q,q+4);getans();
		//for (int j=0;j<4;j++) printf("j=%d %d\n",j,q[j]);
		
	}
}

int main(){
	init(),work();
	return 0;
}


Unity 2D精灵点击交互实现:从BoxCollider 2D到Event Trigger的完整指南 本文提供了Unity 2D精灵点击交互的完整实现指南。通过详细拆解BoxCollider 2D与Event Trigger两大核心组件的协同工作原理,手把手教你为Sprite Renderer添加点击、悬停等事件响应。文章包含从基础配置到进阶优化、性能调试的实战步骤,帮助开发者高效实现游戏世界内的对象交互,是Unity 2D开发的实用教程。 阅读详情

相关推荐

村田电感模型选型指南:.s2p和SPICE netlist在ADS中的表现差异

本文深度解析了村田电感在ADS仿真中.s2p与SPICE netlist两种模型的表现差异。通过对比模型本质、仿真设置及高低频段精度,揭示了.s2p文件基于实测插值而SPICE netlist基于等效电路外推的特性。文章提供了明确的选型策略,帮助工程师根据项目频段、仿真类型和精度需求,在射频与微波电路设计中做出最优模型选择。

k9l0m1的博客 452

BZOJ2653: middle

BZOJ2653: middle Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整。 给你一个长度为n的序列s。 回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c,d]之间的子序列中,最大的中位数。 其中a<b<c<d。 位置也从0开始标号。 我会使用一些方式强制你在...

weixin_30642267的博客 162

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 489

BZOJ 2653: middle

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2653 关于这道题嘛,首先二分是很容易想的。我们二分中位数,然后判断是否能够达到。设中位数为Mid,如果我们把大于等于Mid的标记为1,小于Mid的标记为-1,则只要存在一段区间满足左端点在[a,b]且右端点在[c,d]并且和大于等于0的即是可行。我们发现[b,c]是必选的,因此我们只要求

执重剑,横江过雁 465

转载:YOLOv8改进全新Inner-IoU损失函数:扩展到其他SIoU、CIoU等主流损失函数,带辅助边界框的损失

目标检测是计算机视觉中的基本任务,包括目标分类和定位。边界框回归损失函数是检测器定位分支的重要组成部分,检测器的定位精度在很大程度上取决于边界框回归,在当前的检测器中发挥着不可替代的作用。在BBR中,IoU损失可以准确描述预测边界框与GT框之间匹配的程度,确保模型在训练过程中可以学习到目标的位置信息。作为现有主流边界框回归损失函数的基本部分,IoU定义如下:B和分别代表预测框和GT框。定义IoU之后,相应的损失可以定义如下:至今,基于IoU的损失函数逐渐成为主流并占据主导地位。

wuling129的专栏 4942

基于deepseek本地模型的本地知识库构建

通过以上步骤,你已经成功构建了一个基于 AnythingLLM 和 LM Studio 的本地知识库。这个系统不仅能够高效地存储和检索知识,还能结合强大的语言模型生成准确的回答。你可以根据自己的需求进一步扩展和优化这个系统,比如增加更多的文档格式支持、优化检索算法等。

qq_30178745的博客 1381

BZOJ2653:middle

浅谈主席树:https://www.cnblogs.com/AKMer/p/9956734.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=2653 首先,我们判断一个序列的中位数是否大于等于\(limit\),我们可以使大于\(limit\)的值为\(1\),小于\(limit\)的值为\(-1\)。如果这个新序列...

aga28832的博客 145

C#上位机+YOLO实时目标检测:摄像头采集+多线程推理+精度调优全流程

标注数据集:使用LabelImg工具标注目标对象,按YOLO格式整理数据集;模型训练:使用Ultralytics库训练自定义模型,提升特定目标的检测精度;训练参数优化:增加训练轮数(epochs=100200)、调整批次大小(batch=1632)、使用数据增强(flip、mosaic等)。摄像头采集:封装通用采集类,支持USB摄像头/网口相机,实现稳定帧读取与异常处理;多线程推理:采用“采集线程+推理线程+UI线程”解耦架构,使用线程安全队列传递帧数据,彻底解决界面卡顿;核心封装。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 673

[BZOJ]2653: middle

题解:神.....神题 求中位数->区间第k大->主席树 好了进死胡同了 因为没办法差分区间和区间 我们再考虑 对于中位数...那我们把大于等于这个数的置1 小于这个数置-1 然后查询区间和是否大于等于0来check 根据这个性质 我们考虑二分中位数(因为具有单调性...很明显证明 但是每次二分都去修改序列 复杂度太高接受不了 我们考虑用主席树优化 记录把某个位置置为...

weixin_30770783的博客 96

地平线旭日X5开发板--搭建ROS1环境开发

由于RDK X5是基于Ubuntu22.04 进行版本释放,而ROS1只兼容到了20.04,为了更很好的做以前ROS1相关代码方案的快速迁移,提供了使用docker 的ros环境,进而使用ros1的方案。

bingdund的博客 1019

人员行为规范检测:YOLOv8+C#实现工厂车间安全监控,违规即报警零延迟

该方案通过YOLOv8的装备检测与姿态估计的动作识别,结合C#的实时管控能力,实现了从“被动巡检”到“主动预警”的转变。相比传统人工,违规响应速度提升10倍,全年可减少90%以上的安全隐患。方案已在3家制造企业落地,支持自定义违规规则(如新增“吸烟”“未系安全带”),可根据车间场景灵活扩展。需要完整的模型训练配置文件(含数据集增强脚本)或C#系统源码(视频处理+报警模块)的,评论区扣“SafetyDetect”,可直接获取部署版本~

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1174

bzoj2653:middle

思路:首先容易想到二分答案,但如何去check呢,对于一段区间[l,r],把所有小于答案的都赋值为-1,大于等于它的都赋值为1,然后求左端点在[a,b],右端点在[c,d]的最大子串和即可(也就是区间[a,b]的最大右子串和加上(b,c)的子串和加上区间[c,d]的最大左子串和)这样既可,用个线段树维护一下,每次暴力重建,单次询问的复杂度是完全可以承受的,但如果多次询问时间复杂度将是n^...

V469584691的博客 145

YoloV8改进策略:基于双层路由注意力的视觉Transformer提升YoloV8的检测能力

本文使用2023年最新提出的BiFormer,实现对YoloV8的改进。目前,BiFormer还有在显存占用,还有性能存在问题。我们先试试效果,期待作者在Pytoch上早日实现优化。论文链接:https://arxiv.org/abs/2303.08810代码链接:https://github.com/rayleizhu/BiFormer作为视觉transformer的核心构建模块,注意力是捕捉长程依赖关系的强大工具。

m0_47867638的博客 2845

Bzoj2653: middle

题面 传送门 Sol 丽洁姐的题目还是棒棒的 考虑二分答案 Check?Check?Check? 把小于它的设为−1−1-1,大于等于它的设为111 [a,b][a,b][a, b]求一个最大后缀子段和 [c,d][c,d][c, d]求一个最大前缀子段和 [b+1,c−1][b+1,c−1][b+1, c-1]求一个和 加起来如果大于等于000,那么满足要求,这个数还可以...

Cyhlnj 218

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

bzoj 2653: middle

Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整。给你一个 长度为n的序列s。回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c,d]之间的子序列中,最大的中位数。 其中a<b<c<d。位置也从0开始标号。我会使用一些方式强制你在线。 Input 第一行序列长度n。...

weixin_30439031的博客 132

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

BZOJ 2653: middle 主席树+二分

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2653 对于每一个询问,我们可以用二分答案来判断当前值可不可行。 先不考虑多组询问,可以把每一个大于等于二分值的数字设成1,小于二分值的数字设成-1,然后求出[b+1,c-1]的区间和以及[a,b]的右端最大连续和以及[c,d]的左端最大连续和,这几个操作可以用传递结构体的线段树来判定,

Oakley 956

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: APIO2015&2014题解
下一篇: uoj#164. 【清华集训2015】V
thy_asdf
博客等级 码龄12年 16粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值