P2839-[国家集训队]middle【主席树,二分】

正题

题目链接:https://www.luogu.com.cn/problem/P2839


题目大意

nnn个数字,mmm次询问给出(a,b,c,d)(a,b,c,d)(a,b,c,d)表示左端点在[a,b][a,b][a,b]中,右端点在[c,d][c,d][c,d]的子区间中中位数最大的值。


解题思路

显然我们需要二分一下答案midmidmid,然后我们要选择一个满足条件的子区间使得区间≥mid\geq midmid的个数减去<mid<mid<mid的个数最大。

换一种主席树的方式,我们里面是一个按照区间的线段树,外面是按照值域分的。然后维护区间最大前缀和和最大后缀和即可。

时间复杂度O(nlog⁡2n)O(n\log^2 n)O(nlog2n)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int N=21000,M=N<<4;
struct node{int pre,suf,num;
};
int n,m,tot,a[N],b[N],q[4],rt[N];
int ls[M],rs[M],pre[M],suf[M],num[M];
vector<int> v[N];
void PushUp(int x,int L,int R){int mid=(L+R)>>1;if(!ls[x])ls[x]=++tot,pre[tot]=suf[tot]=-1,num[tot]=-(mid-L+1);if(!rs[x])rs[x]=++tot,pre[tot]=suf[tot]=-1,num[tot]=-(R-mid);pre[x]=max(pre[ls[x]],num[ls[x]]+pre[rs[x]]);suf[x]=max(suf[rs[x]],num[rs[x]]+suf[ls[x]]);num[x]=num[ls[x]]+num[rs[x]];return;
}
int Change(int x,int L,int R,int pos){int now=++tot;if(L==R){pre[now]=suf[now]=num[now]=1;return now;}int mid=(L+R)>>1;if(pos<=mid)ls[now]=Change(ls[x],L,mid,pos),rs[now]=rs[x];else rs[now]=Change(rs[x],mid+1,R,pos),ls[now]=ls[x];PushUp(now,L,R);return now;
}
node Ask(int x,int L,int R,int l,int r){if(l>r||!x)return (node){-1,-1,-(r-l+1)};int mid=(L+R)>>1;if(L==l&&R==r)return (node){pre[x],suf[x],num[x]};if(r<=mid)return Ask(ls[x],L,mid,l,r);if(l>mid)return Ask(rs[x],mid+1,R,l,r);node la=Ask(ls[x],L,mid,l,mid);node ra=Ask(rs[x],mid+1,R,mid+1,r);return (node){max(la.pre,la.num+ra.pre),max(ra.suf,ra.num+la.suf),la.num+ra.num};
}
bool check(int x,int a,int b,int c,int d){node L=Ask(rt[x],1,n,a,b);node M=Ask(rt[x],1,n,b+1,c-1);node R=Ask(rt[x],1,n,c,d);return (L.suf+M.num+R.pre)>=0;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]),b[i]=a[i];sort(b+1,b+1+n);int cnt=unique(b+1,b+1+n)-b-1;for(int i=1;i<=n;i++){a[i]=lower_bound(b+1,b+1+cnt,a[i])-b;v[a[i]].push_back(i);}for(int i=cnt;i>=1;i--){rt[i]=Change(rt[i+1],1,n,v[i][0]);for(int j=1;j<v[i].size();j++)rt[i]=Change(rt[i],1,n,v[i][j]);}scanf("%d",&m);int last=0;for(int i=1;i<=m;i++){scanf("%d%d%d%d",&q[1],&q[2],&q[3],&q[0]);q[1]=(q[1]+last)%n+1;q[2]=(q[2]+last)%n+1;q[3]=(q[3]+last)%n+1;q[0]=(q[0]+last)%n+1;sort(q,q+4);int l=1,r=cnt;while(l<=r){int mid=(l+r)>>1;if(check(mid,q[0],q[1],q[2],q[3]))l=mid+1;else r=mid-1;}printf("%d\n",last=b[r]);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软把UWP定位成业务线应用程序开发平台

微软把UWP定位成传统业务线&#xff08;LOB&#xff09;应用程序开发平台&#xff0c;以使用Windows Template Studio实现快速应用程序开发为重点。但是&#xff0c;为了把LOB开发人员吸引到UWP平台&#xff0c;他们在做的事情不止这些。最初发布时&#xff0c;通用Windows平台…

牛客网【每日一题】 合集

文章目录2020年3月25日 NC50439 tokitsukaze and Soldier 牛客练习赛50-C2020年3月26日 NC13230 合并回文子串 美团2017年CodeM大赛-初赛A轮2020年3月27日 NC15553 数学考试 2018年长沙理工大学程序设计竞赛2020年3月30日 NC50528 滑动窗口 《信息学奥赛一本通》Part5.52020年3…

NBA总冠军

NBA总冠军NBA总冠军NBA总冠军 题目描述 又要考试了&#xff0c;LJW决定放松一下&#xff0c;就打开电视&#xff0c;看见篮球赛&#xff0c;他立即想到了每年的NBA总冠军队伍。由于复习紧张&#xff0c;他只记起了一部分&#xff0c;记忆的内容是正确的&#xff0c;可能不是按…

P6773-[NOI2020]命运【线段树合并,树形dp】

正题 题目链接:https://www.luogu.com.cn/problem/P6773 题目大意 nnn个点的一棵树&#xff0c;边权可以是000或111。mmm个条件(x,y)(x,y)(x,y)表示要求x,yx,yx,y之间要有边权值为111&#xff08;保证xxx是yyy的祖先&#xff09;&#xff0c;求方案数。 解题思路 考虑容斥&am…

读 《CSharp Coding Guidelines》有感

C# 编程指南前不久在 Github 上看见了一位大牛创建一个仓库&#xff1a;CSharpCodingGuidelines&#xff0c;打开之后看了一下 readme.md 相关描述&#xff0c;感觉应该很不错&#xff0c;于是就 clone 到本地拜读一下&#xff0c;这里列一些自己的笔记&#xff0c;方便日后回顾…

牛客网 【每日一题】4月10日 二分图染色(弱化版)

精讲 组合、容斥 文章目录题目&#xff1a;题意&&题解&#xff1a;&#xff1a;代码&#xff1a;题目传送题目&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 524288K&#xff0c;其他语言1048576K 64bit IO Format: %lld …

数字游戏(水博客ing / csp-J T1 / luogu 5660)

数字游戏 luogu 5660 题目大意&#xff1a; 给你一个长度为8的01串&#xff0c;分别表示你某一场比赛是否AKAKAK了&#xff0c;问你AKAKAK了几场比赛 输入样例#1 00010100输出样例#1 2输入样例#2 11111111输出样例#2 8样例解释#1 该 01 字符串中有 2 个字符 1。 样例…

P2231-[HNOI2002]跳蚤【容斥】

正题 题目链接:https://www.luogu.com.cn/problem/P2231 题目大意 求一个由[1,m][1,m][1,m]的整数组成的长度为nnn的序列使得他们的gcdgcdgcd和mmm互质。 解题思路 考虑容斥减去不合法的答案。那就是要求序列的gcdgcdgcd和mmm不互质的个数&#xff0c;那么我们依旧需要容斥计…

微软Windows Community Toolkit一览

为了满足业务线开发人员的需求&#xff0c;微软推出了Windows Community Toolkit。这个快速变化的库充当了新的UWP控件和功能的测试基础。在创建UWP之初&#xff0c;其重点目标是智能手机和平板电脑。这意味着大部分开发预算都花费在控件上&#xff0c;确保这些控件能够在有限的…

牛客网【每日一题】4月14日题目精讲 Xorto

文章目录题目描述题解&#xff1a;代码&#xff1a;扩展传送时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format:%lld 题目描述 给定一个长度为n的整数数组&#xff0c;问有多少对互不重叠的非空区…

YbtOJ#20081-[NOIP2020模拟赛B组Day8]树上排列【组合数,树形dp】

正题 题面链接:https://www.ybtoj.com.cn/contest/62/problem/3 题目大意 nnn个点的一棵树&#xff0c;每个边的边会表示一个大小关系&#xff08;如px>pyp_x>p_ypx​>py​或px<pyp_x<p_ypx​<py​&#xff09;。求有多少个排列满足所有条件。 解题思路 考…

如何简单的在 ASP.NET Core 中集成 JWT 认证?

前情提要&#xff1a;ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统文章超长预警&#xff08;1万字以上&#xff09;&#xff0c;不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包自上一篇介绍如何在 ASP.NET Core 中集成 JWT 的博文发布…

【二分】【暴力】蛋糕(gmoj 3918)

蛋糕 gmoj 3918 题目大意&#xff1a; 有一个蛋糕&#xff0c;分成n∗mn*mn∗m个单位&#xff0c;现在横竖各切三刀&#xff0c;使其分成16个矩阵&#xff0c;使价值最小的矩阵价值最大 输出样例 5 5 95998 21945 23451 99798 74083输入样例 3数据范围 40%的数据&#x…

Music Problem

文章目录题目描述题意&#xff1a;题解&#xff1a;传送时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld 题目描述 Listening to the music is relax, but for obsessive(强迫症), it …

【DP】翻硬币(jzoj 3921)

翻硬币 jzoj 3921 题目大意&#xff1a; 给你一个长度为nnn的当前01串和目标01串&#xff0c;现在你要做mmm此操作&#xff0c;每次操作你要使kkk个不同的位取反&#xff0c;现在问你有多少种方法可以使当前01串变为目标01串 输入样例&#xff1a; 3 2 1 100 001输出样例&…

可扩展架构设计的三个维度

业界对于可扩展的系统架构设计有一个朴素的理念,就是&#xff1a;通过加机器就可以解决容量和可用性问题这一理念在“云计算”概念疯狂流行的今天&#xff0c;得到了广泛的认可&#xff01;对于一个规模迅速增长的系统而言&#xff0c;容量和性能问题当然是首当其冲的。但是随着…

YbtOJ#20082-[NOIP2020模拟赛B组Day8]导出子图【dp】

正题 题面链接:https://www.ybtoj.com.cn/contest/62/problem/4 题目大意 nnn个区间&#xff0c;如果第xxx个区间和第yyy个区间有交集那么xxx到yyy直接就有一条边。 求这张图上的所有导出子图中有多少棵树。 解题思路 条件可以转换为这些区间联通并且没有一个位置被333个区间…

.NET Core开发日志——简述路由

有过ASP.NET或其它现代Web框架开发经历的开发者对路由这一名字应该不陌生。如果要用一句话解释什么是路由&#xff0c;可以这样形容&#xff1a;通过对URL的解析&#xff0c;指定相应的处理程序。回忆下在Web Forms应用程序中使用路由的方式&#xff1a;然后是MVC应用程序&…

【单调栈】奶牛的歌声(jzoj 1256)

奶牛的歌声 jzoj 1256 题目大意 有n头牛&#xff0c;每头牛的声音可以被两边第一头比他高的牛所听到&#xff0c;音量为S&#xff0c;问听到声音的音量之和最大的牛听到的音量之和是多少 输入样例 3 4 2 3 5 6 10输出样例 7样例解释 队伍中有3头奶牛&#xff0c;第1头牛…

P3168-[CQOI2015]任务查询系统【主席树】

正题 题目链接:https://www.luogu.com.cn/problem/P3168 题目大意 nnn个任务(si,ei,ti)(s_i,e_i,t_i)(si​,ei​,ti​)表示从si∼eis_i\sim e_isi​∼ei​的任务优先级为tit_iti​。 然后每次询问一个时刻前kkk小的优先级任务优先级和。 解题思路 开主席树&#xff0c;在sis…