【做题记录】多校-ds

news/2025/11/9 19:57:50/文章来源:https://www.cnblogs.com/zhangxyhp/p/19203148

C. [Ynoi2005] rmscne

直接做不好维护,考虑扫描线。用线段树对每个位置 \(i\) 维护 \(p_i\) 表示 \([i,p_i]\)\([i,r]\) 的最小的合法子区间。维护方式很简单,当加入 \(a_r\) 时,设上一次出现的位置为 \(j\),则 \([j+1,r]\)\(p\) 值应赋为 \(r\)

考虑询问 \([l,r]\),我们要找到最大的 \(c\) 使得 \([l,c]\)\([l,r]\) 的合法子区间,答案即为 \(\min_{i=l}^{c}\{p_i-i\}\)。考虑当加入 \(r\) 时,上一次出现的位置 \(j\) 就没用了,\(j\) 对应的 \(c\) 就应指向 \(j+1\),使用并查集即可。

Code
#include<bits/stdc++.h>
#define ll long long
#define il inline
#define pii pair<int,int>
#define fir first
#define sec second
#define mp make_pair
#define pb push_back
#define lid id<<1
#define rid id<<1|1
using namespace std;
namespace asbt{
const int maxn=2e6+5,inf=1e9;
int n,m,a[maxn],fa[maxn],tr[maxn<<2],tag[maxn<<2],pos[maxn],ans[maxn];
vector<pii> q[maxn];
il int find(int x){return x!=fa[x]?fa[x]=find(fa[x]):x;
}
il void pushup(int id){tr[id]=min(tr[lid],tr[rid]);
}
il void pushtag(int id,int l,int r,int x){tag[id]=x,tr[id]=x-r+1;
}
il void pushdown(int id,int l,int r){if(tag[id]){int mid=(l+r)>>1;pushtag(lid,l,mid,tag[id]);pushtag(rid,mid+1,r,tag[id]);tag[id]=0;}
}
il void upd(int id,int L,int R,int l,int r,int x){if(L>=l&&R<=r){pushtag(id,L,R,x);return ;}pushdown(id,L,R);int mid=(L+R)>>1;if(l<=mid){upd(lid,L,mid,l,r,x);}if(r>mid){upd(rid,mid+1,R,l,r,x);}pushup(id);
}
il int query(int id,int L,int R,int l,int r){if(L>=l&&R<=r){return tr[id];}pushdown(id,L,R);int mid=(L+R)>>1,res=inf;if(l<=mid){res=min(res,query(lid,L,mid,l,r));}if(r>mid){res=min(res,query(rid,mid+1,R,l,r));}return res;
}
int main(){ios::sync_with_stdio(0),cin.tie(0);cin>>n;for(int i=1;i<=n;i++){cin>>a[i];fa[i]=i;}cin>>m;for(int i=1,l,r;i<=m;i++){cin>>l>>r;q[r].pb(mp(l,i));}for(int i=1;i<=n;i++){upd(1,1,n,pos[a[i]]+1,i,i);fa[find(pos[a[i]])]=find(pos[a[i]]+1);pos[a[i]]=i;for(pii t:q[i]){int j=t.fir,id=t.sec;ans[id]=query(1,1,n,j,find(j));}}for(int i=1;i<=m;i++){cout<<ans[i]<<'\n';}return 0;
}
}
int main(){return asbt::main();}

D. [Ynoi2019 模拟赛] Yuno loves sqrt technology II

假设 \(n,m\) 同阶。(实则是嫌麻烦)

这个问题显然可以莫队 + 树状数组做,莫队过程中当右端点右移时给答案加上这个区间中比 \(a_r\) 大的个数,其他类似。然而时间复杂度 \(O(n\sqrt{n}\log n)\),需要进一步优化。


莫队二次离线

顾名思义,虽然莫队已经是离线算法了,但其中的一些区间查询(如查询当前 \([l,r]\) 中有多少个数比 \(a_r\) 大)仍然需要较高复杂度,于是我们将这些查询再离线下来,用扫描线的方式解决。


回到本题,这个查询显然可以差分成 \([1,r]\)\([1,l-1]\)\([1,r]\) 可以直接使用树状数组预处理出来,不成问题;我们就将 \([1,l-1]\) 这一部分离线下来。然后对 \(l\) 进行扫描线,我们将在值域上进行 \(O(n\sqrt{n})\) 次区间查询和 \(O(n)\) 次单点修改,于是再分块即可。注意这样求出来的答案实则是相邻两个询问答案之差,需要再进行前缀和。

然而空间复杂度爆炸。考虑莫队左右端点移动的过程,每个 \(l\) 会对应一段区间的 \(r\),于是将它存成区间即可做到空间线性。

Code
#include<bits/stdc++.h>
#define int long long
#define il inline
#define lwrb lower_bound
#define pb push_back
using namespace std;
namespace asbt{
const int maxn=1e5+5,B=316,maxb=319;
int n,m,a[maxn],lsh[maxn];
int bnm,st[maxb],ed[maxb],bel[maxn];
int pre[2][maxn],ans[maxn];
struct node{int l,r,id,typ;node(int l=0,int r=0,int id=0,int typ=0):l(l),r(r),id(id),typ(typ){}il bool operator<(const node &x)const{return bel[l]!=bel[x.l]?l<x.l:bel[l]&1?r<x.r:r>x.r;}
}b[maxn];
vector<node> c[maxn];
struct{#define lowbit(x) (x&-x)int tr[maxn];il void add(int p){for(;p<=n;p+=lowbit(p)){tr[p]++;}}il int query(int p){int res=0;for(;p;p-=lowbit(p)){res+=tr[p];}return res;}#undef lowbit
}F;
struct{int tr[maxn],tag[maxb];il void add(int l,int r){if(l>r){return ;}int pl=bel[l],pr=bel[r];if(pl==pr){for(int i=l;i<=r;i++){tr[i]++;}return ;}for(int i=pl+1;i<pr;i++){tag[i]++;}for(int i=l;i<=ed[pl];i++){tr[i]++;}for(int i=st[pr];i<=r;i++){tr[i]++;}}il int query(int p){return tr[p]+tag[bel[p]];}
}BL[2];
il void init(){cin>>n>>m;int cnt=0;for(int i=1;i<=n;i++){
//	cerr<<"666\n";cin>>a[i];lsh[++cnt]=a[i];}sort(lsh+1,lsh+cnt+1);cnt=unique(lsh+1,lsh+cnt+1)-lsh-1;for(int i=1;i<=n;i++){a[i]=lwrb(lsh+1,lsh+cnt+1,a[i])-lsh;F.add(a[i]);pre[0][i]=pre[0][i-1]+F.query(a[i]-1);pre[1][i]=pre[1][i-1]+F.query(n)-F.query(a[i]);}for(int i=1;i<=m;i++){cin>>b[i].l>>b[i].r;b[i].id=i;}bnm=(n+B-1)/B;for(int i=1;i<=bnm;i++){st[i]=ed[i-1]+1;ed[i]=min(ed[i-1]+B,n);for(int j=st[i];j<=ed[i];j++){bel[j]=i;}}
}
il void work(){sort(b+1,b+m+1);int l=1,r=0;for(int i=1;i<=m;i++){if(r<b[i].r){c[l-1].pb(node(r+1,b[i].r,-b[i].id,1));ans[b[i].id]+=pre[1][b[i].r]-pre[1][r];r=b[i].r;}if(l>b[i].l){c[r].pb(node(b[i].l,l-1,b[i].id,0));ans[b[i].id]-=pre[0][l-1]-pre[0][b[i].l-1];l=b[i].l;}if(r>b[i].r){c[l-1].pb(node(b[i].r+1,r,b[i].id,1));ans[b[i].id]-=pre[1][r]-pre[1][b[i].r];r=b[i].r;}if(l<b[i].l){c[r].pb(node(l,b[i].l-1,-b[i].id,0));ans[b[i].id]+=pre[0][b[i].l-1]-pre[0][l-1];l=b[i].l;}}
//	cerr<<"777\n";
}
il void solve(){for(int i=1;i<=n;i++){BL[0].add(a[i]+1,n),BL[1].add(1,a[i]-1);for(node t:c[i]){for(int j=t.l;j<=t.r;j++){if(t.id>0){ans[t.id]+=BL[t.typ].query(a[j]);}else{ans[-t.id]-=BL[t.typ].query(a[j]);}}}}for(int i=1;i<=m;i++){ans[b[i].id]+=ans[b[i-1].id];}for(int i=1;i<=m;i++){cout<<ans[i]<<'\n';}
}
int main(){
//	system("fc P5047_1.out my.out");
//	freopen("P5047_1.in","r",stdin);
//	freopen("my.out","w",stdout);ios::sync_with_stdio(0),cin.tie(0);init(),work(),solve();return 0;
}
}
signed main(){return asbt::main();}
/*
5 3
9 3 9 4 7
1 5
2 4
3 5
*/

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

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

相关文章

11-08 题

11-08 题 目录11-08 题P5405 [CTS2019] 氪金手游 - 洛谷AT_agc036_f [AGC036F] Square Constraints - 洛谷F - Almost Sorted 2G - One Time Swap 2P13004 [GCJ 2022 Finals] Schrdinger and Pavlov - 洛谷Problem - 1…

POSIX兼容系统上read和write系统调用的行为总结

关于UNIX和Linux的宣传语中,一切皆文件应该是最广为人知的一句。 不管是普通文件,还是硬件设备、管道、网络套接字,在Linux甚至还有信号和定时器都共享一套相似的api,大家可以用类似的代码完成各种不同的任务,大大…

AI也能管文件?RustFS+Claude实现智能存储自动化!

AI也能管文件?RustFS+Claude实现智能存储自动化!2025年,当Claude 4.5宣布可​连续编程30小时不"断片" ​,而RustFS凭借零GC设计将存储性能提升42% 时,我们终于意识到:AI管理存储系统的时代已经到来。一…

跟着小码学算法Day16:对称二叉树 - 指南

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

摸鱼笔记[3]-给windows添加类似macOS的按空格预览

🌟 神器「QuickLook」让 Windows 也能像 macOS 一样,空格键一按👇 ✨ 视频 / 图片 / PDF / PSD / 压缩包…统统秒开!零加载零等待~摘要 🌟 神器「QuickLook」让 Windows 也能像 macOS 一样,空格键一按👇…

11.8 联考总结

11.8 联考总结 T1题意较复杂,读懂之后比较简单。发现T3是计数题,很好。先开 T3 ,比想象中简单,思路非常自然。回去看T2发现有简单 \(O(n\log n)\) 做法,84分!但我想得非常复杂,但还有更简单的 \(O(n^2)\),52分…

Spring BeanDefinition接口

[[Spring IOC 源码学习总笔记]] BeanDefinition BeanDefinition 主要是用来描述Bean,主要包括:Bean的属性、是否单例、延迟加载、Bean的名称、构造方法等。 简而言之: 在容器中的 一个Bean 对应一个 BeanDefinition…

pythontip 计算字符串中的音节数

编写一个程序来计算一个单词中的音节数。 音节之间由连字符分隔。例如: beau-ti-ful => 三个音节 cat => 一个音节 re-frig-er-a-tor => 五个音节 定义函数count_syllables()的函数,该函数接受一个参数word…

深入解析:26-基于STM32的小区智能井盖监测系统设计与实现

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

2025/11/09 LGNOIpR23

如果不是直接写 100pts 做法,就是赛时不会,或者对 AC 做法有很大启发。 T1 题意简述 求 \(a(1+p+pq)=n\) 整数解数量,其中 \(n\) 是给定的, \(p,q\) 均不能取 \(1\)。 sol 考虑试除法,一遍试出所有的 \(a\),然后…

Python “值层面” 该怎么说?别再混淆 “字面量” 与 “不可变对象”

为帮助Python入门者厘清“值/字面量/对象”的概念混淆,我将围绕“为什么‘a的值是10’表述不准确”这一痛点,结合内存模型与代码示例,详细解析字面量和不可变对象的区别,最终总结认知误区与正确表述方式。# Python…

11.7 联考总结

11.7 联考总结 T1比较简单,随便找找支配关系就做完了。T2之前听 nkp 讲过题意比较畏惧,简单思考了一下就放弃了。T3是很好的计数题,很容易想到 \(O(n^2)\) 做法。但是有个组合数下指标求和难以优化掉,尝试换别的做…

pythontip 返回字典的键值

编写一个程序,分别按字母顺序返回字典的键和值。 定义函数get_sorted_keys_values(),参数为dict_obj(字典类型)。 在函数内部,返回一个由两个列表组成的列表:一个列表是按字母顺序排列的字典键,另一个列表是它们对…

详细介绍:SQL入门:行列转换实战-从基础到高级

详细介绍:SQL入门:行列转换实战-从基础到高级pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

折腾笔记[36]-调用海康SDK实现相机拍照

使用c#调用海康SDK实现相机拍照.摘要 使用c#调用海康SDK实现相机拍照. 前言 本文目的是分享人工踩坑经验, AI搜索引擎可以更快给出正确结果(用于投喂AI😂). 关键信息海康SDK版本: 4.6.x .net8框架 封装: HikVisionCo…

CF840C On the Bench 分析

题目概述 题目链接:https://www.luogu.com.cn/problem/CF840C。 给你 \(n\) 给数,将他们排列成一个序列并满足相邻两项 \(a_i,a_{i+1}\) 相乘不为平方数。问方案。 分析 我只说明一种解法,其他类的解法总结见:http…

HubSpot如何构建MCP服务器实现AI代理集成

HubSpot产品执行副总裁分享公司如何基于Model Context Protocol构建远程MCP服务器,详细解析技术架构选择、认证实现、与现有系统集成等核心挑战,以及AI代理在CRM领域的实际应用场景。HubSpot的MCP实现:CRM公司的AI代…

CSP-S 2025 趋势记

有个人 CSP-S 寄飞了,我不说是谁。感觉模拟赛也没啥动力打了。 T1 写了 \(10\) min 切了,非常自信。T2 写了 \(30\) min 被卡成 \(80\) 了,趋势。 然后开始传统艺能发呆,T3 看半天看错题了,看成可以替换无限次了,…

苹果手机iOS15.8.2 – 16.7.8最新越狱方法

支持设备 越狱支持所有 A9-A11 片上系统 (SoC)。您可以在下面找到兼容的 Palera1n 越狱 iPhone 和 iPad 的实际列表。越狱经过测试,可以在运行 iOS 15 的 iPhone X (GSM)、iPhone 8、iPhone 7 和 iPhone 6s上运行和工…

威联通NAS部署umami - 详解

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