qmd 模拟赛的一道题

news/2025/10/7 14:49:08/文章来源:https://www.cnblogs.com/BYR-KKK/p/19128495

原题用下面的做法可以强制在线

没注意到支配对也是可以做的。

考虑如何求区间 mex,线段树扫描 \(r\),维护 \(lst_i\) 代表 \(i\) 最后一次出现的位置,只需要线段树二分即可。在线就把扫描线变成主席树。

回到这个题,注意到只需要关心所有长度为 \(k\) 的区间,为了方便将 \(lst_i\) 的定义改成到 \(i\) 的距离。本质上就是,对于扫描线在 \([l+k-1,r]\) 处的所有线段树查询信息。二分 mex 为 \(x+1\),需要求出是否存在一棵 \([l+k-1,r]\) 中的线段树满足 \([0,x]\) 上的权值 \(<k\),画到二维平面上长这个样子:

即需要判断红色矩形内是否存在那样一条绿线满足线上的值全部 \(<k\),先整体二分一下。注意到矩形是 3-side 的,横轴有两维限制,纵轴只有一维。于是换维扫描线,此时线段树维护扫到某个纵坐标时,所有横坐标的历史最大值。实际上是:

  • 修改,对于一段区间 \([l,r]\),依次将 \(v_l\sim v_r\)\(0,1,2,\dots,r-l+1\) check max。

  • 询问,查询区间最小值。

可以发现修改次数是和 \(n\) 线性相关。注意到修改之间实际上有支配关系,我们可以将修改操作变成区间赋值成 \(x,x+1,\dots\)。这样加上整体二分就是 \(2\log\) 的。

场上止步于此了。可以发现将整体二分变成主席树就是 \(1\log\) 了,这一步没发现有点菜。

修改操作的支配关系:注意到对于一个位置 \(x\),只需要关注包含它的最远一个修改。那么对于修改 \((l,r)\),找到 \(m\) 为前面操作中修改左端点 \(\in[1,l]\),右端点的最大值。那么只需对 \([m+1,r]\) 做区间赋值即可。

2log 的代码:

#pragma GCC optimize(3)
#include<bits/stdc++.h>
//#define int long long
#define fi first
#define se second
#define pii std::pair<int,int>
#define vint std::vector<int>
#define vpair std::vector<pii>
#define all(x) (x).begin(),(x).end()
#define SZ(x) (x).size()
#define debug(...) fprintf(stderr,##__VA_ARGS__)template<typename T>
void read(T &x){x=0;int f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9') x=x*10+(int)(c-'0'),c=getchar();x*=f;
}std::stack<char>st;
template<typename T>
void print(T x){if(x==0) putchar('0');if(x<0) putchar('-'),x=-x;while(st.size()) st.pop();while(x) st.push((char)('0'+x%10)),x/=10;while(st.size()) putchar(st.top()),st.pop();
}template<typename T>
void printsp(T x){print(x),putchar(' ');
}template<typename T>
void println(T x){print(x),putchar('\n');
}template<typename T,typename I>
bool chkmin(T &a,I b){if(a>b) return a=b,1;return 0;
}template<typename T,typename I>
bool chkmax(T &a,I b){if(a<b) return a=b,1;return 0;
}template<typename T,typename I>
void addedge(std::vector<I>*vec,T u,T v){vec[u].push_back(v);
}template<typename T,typename I,typename K>
void addedge(std::vector<K>*vec,T u,T v,I w){vec[u].push_back({v,w});
}template<typename T,typename I>
void addd(std::vector<I>*vec,T u,T v){addedge(vec,u,v),addedge(vec,v,u);
}template<typename T,typename I,typename K>
void addd(std::vector<K>*vec,T u,T v,I w){addedge(vec,u,v,w),addedge(vec,v,u,w);
}bool Mbe;const int inf=1e9,MOD1=998244353,MOD2=1e9+7;const int maxn=1e6+10;int n,q,a[maxn],ans[maxn];vint pos[maxn];struct info{int l,r,k,id,ml,mr,mid;
}b[maxn];struct segtree{int l[maxn*2],r[maxn*2],ls[maxn*2],rs[maxn*2],lz[maxn*2],mi[maxn*2],tot;void clear(){tot=0;}void dfs(int p){if(!p) return ;mi[p]=inf,lz[p]=-1;dfs(ls[p]),dfs(rs[p]);}void push_up(int p){mi[p]=std::min(mi[ls[p]],mi[rs[p]]);}int build(int L,int R){int p=++tot;l[p]=L,r[p]=R,lz[p]=-1;if(L==R) return mi[p]=inf,p;int mid=(L+R)>>1;ls[p]=build(L,mid),rs[p]=build(mid+1,R);return push_up(p),p;}void push_down(int p){if(lz[p]==-1) return ;mi[ls[p]]=lz[ls[p]]=lz[p],mi[rs[p]]=lz[rs[p]]=lz[p]+r[ls[p]]-l[ls[p]]+1;lz[p]=-1;}void update(int p,int L,int R,int x){if(l[p]>=L&&r[p]<=R){x=x+l[p]-L;lz[p]=mi[p]=x;return ;}push_down(p);int mid=(l[p]+r[p])>>1;if(mid>=L) update(ls[p],L,R,x);	if(R>mid) update(rs[p],L,R,x);return push_up(p),void();}int query(int p,int L,int R){if(L>R) return inf;if(l[p]>=L&&r[p]<=R) return mi[p];push_down(p);int mid=(l[p]+r[p])>>1,res=inf;if(mid>=L) chkmin(res,query(ls[p],L,R));if(R>mid) chkmin(res,query(rs[p],L,R));return res;}
}ds;struct BIT{int mx[maxn];void clear(){for(int i=1;i<=n;i++) mx[i]=0;}int lowbit(int x){return x&(-x);}void upd(int p,int x){for(;p<=n;p+=lowbit(p)) chkmax(mx[p],x);}int qry(int p){int res=-1;while(p) chkmax(res,mx[p]),p-=lowbit(p);return res;}
}ds_;bool cmp(info x,info y){return x.mid<y.mid;
}void upd(int l,int r,int y){int x=ds_.qry(l);chkmax(x,l-1);if(x>=r) return ;ds.update(1,x+1,r,x-l+1+y);ds_.upd(l,r);
}void solve(){for(int i=1;i<=q;i++){if(b[i].ml>b[i].mr) b[i].mid=inf;else b[i].mid=(b[i].ml+b[i].mr)>>1;}std::sort(b+1,b+q+1,cmp);int z=1,m=0;ds.clear(),ds.dfs(1),ds_.clear();for(int i=0;i<n;i++){if(pos[i].size()){int las=pos[i][0];chkmax(m,las-1);for(int j=1;j<pos[i].size();j++){if(pos[i][j]-1>m) upd(las,pos[i][j]-1,0);las=pos[i][j];}upd(las,n,0);}else m=n;while(z<=q&&b[z].mid==i){if(ds.query(1,std::max(b[z].l,m+1),b[z].r)<b[z].k) b[z].ml=b[z].mid+1;else b[z].mr=b[z].mid-1;z++;}if(z>q||b[z].mid==inf) break;}
}bool Men;signed main(){freopen("vmefifty.in","r",stdin),freopen("vmefifty.out","w",stdout);debug("%.6lfMB\n",(&Mbe-&Men)/1048576.0);read(n),read(q);for(int i=1;i<=n;i++){read(a[i]);if(a[i]<n) pos[a[i]].push_back(i);}for(int i=1;i<=q;i++){read(b[i].l),read(b[i].r),read(b[i].k);b[i].ml=0,b[i].mr=n-1,b[i].id=i;if(b[i].k>b[i].r-b[i].l+1) b[i].k=b[i].r-b[i].l+1;b[i].l+=b[i].k-1;}ds.build(1,n);while(1){bool fl=0;for(int i=1;i<=q;i++){if(b[i].ml<=b[i].mr){solve();fl=1;break;}}if(!fl) break;}for(int i=1;i<=q;i++) ans[b[i].id]=b[i].ml;for(int i=1;i<=q;i++) println(ans[i]);debug("%.6lfms\n",1e3*clock()/CLOCKS_PER_SEC);
}

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

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

相关文章

详细介绍:Apache Druid

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站app软件下载安装如何做网站推广自己的产品

本文首发于个人博客 深度挖掘 Laravel 生命周期&#xff0c;转载请注明出处。这篇文章我们来聊聊 「Laravel 生命周期」 这个主题。虽然网络上已经有很多关于这个主题的探讨&#xff0c;但这个主题依然值得我们去研究和学习。 我想说的是当我们在决定使用某项技术的时候&#x…

wordpress网站备份还原宁波建站

1. 简介 Powerlevel10k 是 Oh My Zsh 最流行的终端主题&#xff0c;它不仅美观&#xff0c;还提供 Git 状态显示、命令执行时间、网络状态、Python 虚拟环境指示等 实用功能。相比其他主题&#xff0c;Powerlevel10k 速度更快、可定制性更强。 本教程将详细介绍如何安装 Powe…

做网站的问卷调查网站建设越来越便宜

提前准备安装tomcat 设备&#xff1a;mac 第一步&#xff1a;下载 进入官网下载压缩包 注意&#xff1a;如果jdk版本是1.8&#xff0c;则tomcat需要v8才行&#xff0c;否则会报错 https://tomcat.apache.org/ 第二步&#xff1a;解压 解压后路径 /Users/you/Library/tomcat…

阿里云网站建设部署与发布视频自己做的网站如何在百度搜到

6 优先级反转问题在嵌入式系统中是一中严重的问题&#xff0c;必须给与足够重视。 a) 首先请解释优先级反转问题 b) 很多RTOS提供优先级继承策略(Priority inheritance)和优先级天花板策略(Priority ceilings)用来解决优先级反转问题&#xff0c;请讨论这两种策略。 答&#xf…

安徽专业网站建设设计it运维是什么意思

window.Promise 已经是 JS 的一个内置对象了。1. Promise 有规格文档吗&#xff1f;2. 你一般如何使用 Promise。-----------目前的 Promise 都遵循 Promises/A 规范。英文规范&#xff1a;https://promisesaplus.com/中文翻译&#xff1a;图灵社区 : 阅读 : 【翻译】Promises/…

百度网站好评北京本地网络推广平台

PyCharm 显示无法加载文件 D:…&#xff0c;因为在此系统上禁止运行脚本。 PyCharm 显示 无法加载文件 D:\python test\AI_CV\venv\Scripts\activate.ps1&#xff0c;因为在此系统上禁止运行脚本。 解决方法&#xff1a; winx点击Windows PowerShell&#xff08;管理员&#…

织梦手机网站怎么安装教程视频兽装定制网站

目录 1.实例分析 a. 设备树实例 b. 驱动实例 2. amba匹配流程 a. 创建amba_device b. 确定总线以及总线的匹配函数 c. 分析总线的匹配函数 1.实例分析 a. 设备树实例 serial7e201000 { compatible "brcm,bcm2835-pl011\0arm,pl011\0arm,primecell"; //创建am…

开封美食网站建设规划昆明企业做网站

Flexmonster Pivot Table & Charts 2.9.X 是一个专门为实时可视化复杂业务数据而设计的组件。该实用程序是用JavaScript编写的&#xff0c;不需要额外的插件&#xff0c;也不受运行的服务器类型的限制。事实上&#xff0c;它的设计可以轻松地与当今大多数可用的开发框架集成…

PCoT: Persuasion-Augmented Chain of Thought for Detecting Fake News and Social Media Disinformation

论文阅读论文《PCoT》Introduction & Related Work 部分总结 📌 Introduction 部分概括 1. 背景与问题重要性数字通信中的虚假信息传播对民主制度构成重大风险,影响公众舆论、加剧意识形态分歧并破坏对政治机构…

实验1 c语言

#include #include int main() { printf(" o \n"); printf("\n"); printf("I I\n"); printf(" o \n"); printf("\n"); printf("I I\n"); system("p…

宏定义中,为什么使用:do{}while(0)这种模式是最安全的

如果你是一名C程序员,你肯定很熟悉宏,它们非常强大,如果正确使用可以让你的工作事半功倍。然而,如果你在定义宏时很随意没有认真检查,那么它们可能使你发狂,浪费N多时间。在很多的C程序中,你可能会看到许多看起…

20251007J赛合订本

A-鲁的智力(gio) B-鲁的女孩(girl)

XML 元素:基础、应用与优化 - 教程

XML 元素:基础、应用与优化 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

Educational Codeforces Round 183 (Rated for Div. 2) A~D

A - Candies for Nephews 模拟。 看 \(3\) 的余数。点击查看代码 #include <bits/stdc++.h>using namespace std;using i64 = long long;void solve() {int n;std::cin >> n;std::cout << (3 - n % …

asp.net网站开发实例教程临沂网站建设 百度优化

BP神经网络指传统的人工神经网络&#xff0c;相比于卷积神经网络(CNN)来说要简单些。 人工神经网络具有复杂模式和进行联想、推理记忆的功能, 它是解决某些传统方法所无法解决的问题的有力工具。目前, 它日益受到重视, 同时其他学科的发展, 为其提供了更大的机会。1986 年, Rom…

长春网站建设硕成传媒app制作开发小程序制作开发

​  域名解析是互联网用户接收他们正在寻找的域的地址的过程。更准确地说&#xff0c;域名解析是人们在浏览器中输入时使用的域名与网站IP地址之间的转换过程。您需要站点的 IP 地址才能知道它所在的位置并加载它。但&#xff0c;在这个过程中&#xff0c;可能会出现多种因素…

网站傻瓜式建设品牌维护

文章目录 1. Socket简介2. ServerSocket3. Socket4. 服务器端代码5. 客户端代码 1. Socket简介 Socket&#xff08;Java套接字&#xff09;是Java编程语言提供的一组类和接口&#xff0c;用于实现网络通信。它基于Socket编程接口&#xff0c;提供了一种简单而强大的方式来实现…

外贸网站怎么做效果好平面设计公司怎么找客户

1.1 概述 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。习惯优于配置 1.2 为什么使用Spring Boot J2EE笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。 1.3 Spring Bo…

深入解析:SpringBatch+Mysql+hanlp简版智能搜索

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …