news 2026/4/16 10:53:12

《P2839 [国家集训队] middle》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《P2839 [国家集训队] middle》

题目描述

一个长度为 n 的序列 a,设其排过序之后为 b,其中位数定义为 bn/2​,其中 a,b 从 0 开始标号,除法下取整。

给你一个长度为 n 的序列 s。

回答 Q 个这样的询问:s 的左端点在 [a,b] 之间,右端点在 [c,d] 之间的子区间中,最大的中位数。

其中 a<b<c<d。

位置也从 0 开始标号。

我会使用一些方式强制你在线。

输入格式

第一行序列长度 n。

接下来 n 行按顺序给出 a 中的数。

接下来一行 Q。

然后 Q 行每行 a,b,c,d,我们令上个询问的答案是 x(如果这是第一个询问则 x=0)。

令数组 q={(a+x)modn,(b+x)modn,(c+x)modn,(d+x)modn}。

将 q 从小到大排序之后,令真正的要询问的 a=q0​,b=q1​,c=q2​,d=q3​。

输入保证满足条件。

输出格式

Q 行依次给出询问的答案。

输入输出样例

输入 #1复制

5 170337785 271451044 22430280 969056313 206452321 3 3 1 0 2 2 3 1 4 3 1 4 0

输出 #1复制

271451044 271451044 969056313

说明/提示

对于 5% 的数据,n,Q≤100;

对于另 25% 的数据,n≤2000;

对于 100% 的数据,1≤n≤20000,1≤Q≤25000,1≤ai​≤109。

#include<cstdio> #include<algorithm> #include<vector> using namespace std; #define lc(p) (seg[p].lc) #define rc(p) (seg[p].rc) #define sum(p) (seg[p].s) #define lmax(p) (seg[p].lm) #define rmax(p) (seg[p].rm) const int N=20010; int n,m,tot,last,a,b,c,d;; int val[N],id[N],rt[N]; vector<int>pos[N]; struct Seg { int lc,rc; int s,lm,rm; }seg[N*60]; inline bool cmp(int x,int y){return val[x]<val[y];} inline void up(int p) { sum(p)=sum(lc(p))+sum(rc(p)); lmax(p)=max(lmax(lc(p)),sum(lc(p))+lmax(rc(p))); rmax(p)=max(rmax(rc(p)),sum(rc(p))+rmax(lc(p))); } void build(int &p,int l,int r) { p=++tot; if(l==r){sum(p)=lmax(p)=rmax(p)=-1;return;} int mid=(l+r)>>1; build(lc(p),l,mid);build(rc(p),mid+1,r); up(p); } void insert(int pre,int &p,int L,int R,int pos) { if(!p)p=++tot; if(L==R){sum(p)=lmax(p)=rmax(p)=1;return;} int mid=(L+R)>>1; if(pos<=mid)rc(p)=rc(pre),insert(lc(pre),lc(p),L,mid,pos); else lc(p)=lc(pre),insert(rc(pre),rc(p),mid+1,R,pos); up(p); } Seg query(int p,int L,int R,int l,int r) { if(L>=l&&R<=r)return seg[p]; int mid=(L+R)>>1; if(l>mid)return query(rc(p),mid+1,R,l,r); else if(r<=mid)return query(lc(p),L,mid,l,r); else { Seg ans,lson=query(lc(p),L,mid,l,r),rson=query(rc(p),mid+1,R,l,r); ans.s=(lson.s+rson.s); ans.lm=max(lson.lm,lson.s+rson.lm); ans.rm=max(rson.rm,rson.s+lson.rm); return ans; } } inline bool check(int mid) { //printf("test::%d %d %d %d %d\n",a,b,c,d,id[mid]); int res=0;Seg ans; ans=query(rt[mid],1,n,a,b);res+=ans.rm; //printf("rmax::%d ",ans.rm); if(b+1<=c-1)ans=query(rt[mid],1,n,b+1,c-1),res+=ans.s; ans=query(rt[mid],1,n,c,d);res+=ans.lm; //printf("lmax::%d \n",ans.lm); return res>=0; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&val[i]),id[i]=i; sort(id+1,id+n+1,cmp);//int cnt=unique(id+1,id+cnt+1)-(id+1); build(rt[n+1],1,n); for(int i=n;i;i--)insert(rt[i+1],rt[i],1,n,id[i]); scanf("%d",&m); for(int i=1;i<=m;i++) { scanf("%d%d%d%d",&a,&b,&c,&d); a=(a+last)%n+1;b=(b+last)%n+1; c=(c+last)%n+1;d=(d+last)%n+1; int tmp[5]={0,a,b,c,d}; sort(tmp+1,tmp+4+1); a=tmp[1],b=tmp[2],c=tmp[3],d=tmp[4]; int l=1,r=n,ans; while(l<=r) { //puts("!!"); int mid=(l+r)>>1; if(check(mid))ans=mid,l=mid+1; else r=mid-1; } printf("%d\n",last=val[id[ans]]); } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/28 19:49:17

实时人脸美型功能开发技术挑战:美颜sdk在性能与效果间的取舍

在短视频、直播、视频社交全面爆发的今天&#xff0c;“实时人脸美型”已经从锦上添花&#xff0c;变成了很多产品的基础能力。 用户打开摄像头的第一秒&#xff0c;就在无意识中对美颜效果做出了判断&#xff1a; 顺不顺&#xff1f;像不像我&#xff1f;会不会卡&#xff1f…

作者头像 李华
网站建设 2026/4/14 2:19:27

基于SpringBoot的画师约稿平台毕业设计

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于SpringBoot框架的画师约稿平台&#xff0c;以满足现代数字艺术创作与市场需求之间的对接需求。具体研究目的如下&#xff1a; 首先…

作者头像 李华
网站建设 2026/3/31 4:55:06

基于python调用javascrpt代码:学习笔记

PyExecJS简介 pyexecjs是一个python的库&#xff0c;用于python环境中调用执行javascript代码。对于爬虫逆向来说&#xff0c;这个库是非常合适的。 前期准备 我们需要提前去下载安装node.js node.js官网下载地址&#xff1a;Node.js — 下载 Node.js # 验证 Node.js 版本…

作者头像 李华
网站建设 2026/4/4 9:12:48

Command Injection(命令注入)漏洞及其防御策略

命令注入是一种经典且危险的漏洞类型。这种漏洞能让攻击者像给程序“下错指令”一样,操纵它在主机操作系统上执行任意命令。想象一下,一个原本只是用来显示文件内容的简单工具,却被恶意利用来删除系统文件甚至窃取敏感数据。这究竟是如何发生的?又该如何防范? 什么是命令…

作者头像 李华
网站建设 2026/4/16 10:45:44

Java全栈工程师面试实录:从基础到复杂场景的深度解析

Java全栈工程师面试实录&#xff1a;从基础到复杂场景的深度解析 面试者基本信息 姓名&#xff1a;林浩然 年龄&#xff1a;28岁 学历&#xff1a;硕士 工作年限&#xff1a;5年 工作内容&#xff1a;负责前后端架构设计、微服务开发与优化、项目性能调优。 工作成果&#xf…

作者头像 李华
网站建设 2026/4/14 14:40:17

Flutter for OpenHarmony 实战_随机抽签应用设计与实现

Flutter for OpenHarmony 实战&#xff1a;随机抽签应用设计与实现 欢迎加入开源鸿蒙跨平台社区&#xff1a;开源鸿蒙跨平台开发者社区 文章目录Flutter for OpenHarmony 实战&#xff1a;随机抽签应用设计与实现前言一、抽签算法实现1.1 基础随机选择1.2 多次抽签1.3 权重抽签…

作者头像 李华