2024.11.3 鲜花

news/2025/2/6 10:53:33/文章来源:https://www.cnblogs.com/xrlong/p/18522436

浅谈 RMQ

비밀 인형극 II
  • 어느 한적한 마을 골목 안의 허름한 건물

  • 在某个僻静村庄胡同的破旧建筑里

  • 문을 열고 들어가면 작은 극장이 있죠

  • 开门进去便会见到一个小剧场

  • 솜씨 좋은 인형사가 연극을 마치고 떠나면

  • 一个手艺不错的人偶师演完戏离开的时候

  • 인형들은 극장 창고 안에 남겨져있죠

  • 人偶们便会留在剧场的仓库里

  • 밤이 되어 극장 안에 사람이 사라질 때쯤

  • 每当夜幕降临 人们离开剧场之时

  • 인형들은 조심 조심 혼자 움직이면서

  • 人偶们便会小心翼翼地开始行动

  • "오늘도 수고 많았어, 파티를 시작해볼까"

  • "今天也很辛苦了, 来开个派对吧"

  • 하며 아무도 없는 무대 위에 불을 밝히죠

  • 然后在无人的舞台上点亮闪烁的灯光

  • 군악대 병정 인형이 두둠칫 하며 북을 울리면

  • 军乐队的士兵人偶咚咚地敲着鼓

  • 다른 인형들은 리듬에 맞춰 춤추고 노래를 부르죠

  • 其他的人偶也在随着节奏起舞歌唱

  • 라랏타 흥이 넘치는 이곳은 비밀 무도회

  • 啦啦哒 兴致勃勃的这里是场秘密舞会

  • 힘들었던 일들일랑 잠시 잊고 즐겨 볼까요?

  • 先暂时忘掉那些劳累的事来一起享受一下吧?

  • 라라랏탓타 어서 오세요 비밀의 인형극에

  • 啦啦啦哒哒 欢迎来到这场秘密人偶剧

  • 그댈 얽매는 모든 것을 두고 춤을 춰봐요

  • 在这里放下束缚你的一切来尽情共舞吧

  • 그대가 어떤 존재였는지 누구도 묻지 않으니

  • 没有人会询问你到底是什么样的存在

  • 인형의 몸과 음악 위에 당신을 맡겨 보아요

  • 就将你自己托付给那人偶的身躯和音乐吧

  • 라라랏탓타 함께 불러요 비밀의 인형극

  • 啦啦啦哒哒 一起歌唱吧 就在这秘密人偶剧

  • 어느 한적한 마을 골목을 떠도는 작은 유령들

  • 在某个僻静村庄胡同里游荡的小幽灵们

  • 갈곳 없는 망령들은 거리 곳곳을 헤맸죠

  • 那些无处可归的亡灵们也在街上到处游荡

  • 삶에 미련이 남아 사라지지 못하는 그들은

  • 他们无法抛弃对生活的无尽向往

  • 작은 극장 한켠의 인형 속에 숨어버렸죠

  • 便都藏在了小剧场的人偶里

  • 밤이 되어 극장 안에 사람이 사라질 때쯤

  • 每当夜幕降临 人们离开剧场之时

  • 인형들은 조심 조심 각자 움직이면서

  • 人偶们便会小心翼翼地开始行动

  • "춤추고 놀다 보며는 미련을 잊을 수 있어"

  • "只要尽情地跳舞玩耍就能够忘记对生活的向往"

  • 하며 밤마다 그들만의 작은 축제를 열죠

  • 于是每天晚上都会举行他们自己的小庆典

  • 인형의 몸이 불편해 발이 꼬이고 넘어져도

  • 就算人偶的身体不好使 扭到脚便会摔倒

  • 다른 이들과 함께한다면 그마저 즐거운 일이죠

  • 但倘若能与他人共度时光 也会是很愉快的事啊

  • 라랏타 흥이 넘치는 이곳은 인형 무도회

  • 啦啦哒 兴致勃勃的这里是场秘密舞会

  • 힘들었던 일들일랑 잠시 잊고 즐겨 볼까요?

  • 先暂时忘掉那些劳累的事来一起享受一下吧?

  • 라라랏탓타 어서 오세요 비밀의 인형극에

  • 啦啦啦哒哒 欢迎来到这场秘密人偶剧

  • 그댈 얽매는 모든 것을 두고 춤을 춰봐요

  • 在这里放下束缚你的一切来尽情共舞吧

  • 그대가 어떤 존재였는지 누구도 묻지 않으니

  • 没有人会询问你到底是什么样的存在

  • 인형의 몸과 음악 위에 당신을 맡겨 보아요

  • 就将你自己托付给那人偶的身躯和音乐吧

  • 라라랏탓타 밤이 끝나고 태양이 떠오르면

  • 啦啦啦哒哒 夜晚消逝 太阳又照常升起

  • 파티는 막을 내리고 인형은 멈추겠지만

  • 派对会落下帷幕 人偶也会逐渐停下来

  • 그대가 가진 아픈 기억을 조금이라도 덜어냈다면

  • 但若能从痛苦的记忆中抹除一些的话

  • 내일 밤에도 찾아오기를 기대해도 되겠죠?

  • 也很期待你明天晚上还会再来吧?

  • 라라랏탓타 함께 불러요 비밀의 인형극

  • 啦啦啦哒哒 一起歌唱吧 就在这秘密人偶剧

考虑优秀的复杂度算法。

四毛子:

大体分为四步:

  1. 建立笛卡尔树,复杂度 \(O(n)\)

  2. 维护一个以欧拉序为下标深度为值的数组,复杂度 \(O(n)\)

考虑性质,发现相邻两个之间的差之多为一,问题变成了 \(\pm1\) RMQ,考虑维护。

  1. 将原序列分块,块长为 \(\log(n)\),对于每块求出最值,前后缀最值,块间用 ST 表维护,复杂度 \(O(n)\),于是我们可以 \(O(1)\) 查询端点在不同块之间的询问。

  2. 考虑端点在同一块的询问,发现对于一个左端点固定的长度至多为 \(\log(n)\) 的序列,其至多有 \(\sum\limits_{i=1}^{\log(n)} 2^{i-1} \le n\) 种方案,所以暴力预处理出所有情况,预处理块间差分,每次查表即可。复杂度 \(O(n)+O(1)\)

发现其实现难度和代码常数过于巨大,于是有了一下简单做法。

二毛子:

名字取自 P3793 由乃救爷爷 的一篇题解。

考虑直接去掉四毛子的前两步,考虑维护块间。

其实直接再上一个 ST 表就可以做到 \(O(n\log\log n)+O(1)\) 的,常数也不小,但是实现难度大大降低。

发现长度 \(\log n\) 一般不会超过 \(64\),考虑状压。

具体的,用单调栈维护最值,用 unsigned long long 压栈内元素状态,查询时用位运算拆掉 \(<l\)\(lowbit\) 即可。

复杂度依然是 \(O(n)+O(1)\),并且因为位运算和 \(n\) 的大小的原因,常数巨小。

然而还有一种暴力:

对于块内的询问直接暴力,发现其基本不会落在这个区间,也可以通过微调块长来避免。

既然暴力就暴力到底,直接每 \(\sqrt{n}\) 分一块,每次直接暴力即可,期望是 \(O(n)+O(1)\) 的,通过微调块长依然不太会被卡,常数也很小。

放一下由乃救爷爷的代码,均没卡常:

暴力分块 17.12 s
#include<bits/stdc++.h>
using namespace std;
using llt=long long;
using llf=long double;
using ull=unsigned long long;
#define endl '\n'
#ifdef LOCALFILE *InFile=freopen("in_out/in.in","r",stdin),*OutFile=freopen("in_out/out.out","w",stdout);
#elseFILE *InFile=stdin,*OutFile=stdout;
#endifnamespace GenHelper{unsigned z1,z2,z3,z4,b;unsigned rand_(){b=((z1<<6)^z1)>>13; z1=((z1&4294967294U)<<18)^b;b=((z2<<2)^z2)>>27; z2=((z2&4294967288U)<<2)^b;b=((z3<<13)^z3)>>21; z3=((z3&4294967280U)<<7)^b;b=((z4<<3)^z4)>>12; z4=((z4&4294967168U)<<13)^b;return (z1^z2^z3^z4);}
}
void srand(unsigned x){using namespace GenHelper;z1=x; z2=(~x)^0x233333333U; z3=x^0x1234598766U; z4=(~x)+51;}
int read(){using namespace GenHelper;int a=rand_()&32767;int b=rand_()&32767;return a*32768+b;
}const int N=2e7+3,L=4480;
int n,m,s,c[N],id[N],bg[L],ed[L],cma[L][L],pm[N],nm[N],bl,B; unsigned long long ans;int main(){ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);cin>>n>>m>>s; srand(s); B=max(2,int(sqrt(n)));bg[++bl]=1; for(int i=1;i<=n;++i) c[i]=read(),((i%B==0)&&(ed[bl]=i-1,bg[++bl]=i)),id[i]=bl; ed[bl]=n;for(int i=1;i<=bl;++i){int ma=0; for(int j=bg[i];j<=ed[i];++j) ma=max(ma,c[j]),pm[j]=ma;ma=0; for(int j=ed[i];j>=bg[i];--j) ma=max(ma,c[j]),nm[j]=ma;cma[i][i]=ma;}for(int i=1;i<=bl;++i){int ma=cma[i][i];for(int j=i-1;j;--j) ma=max(ma,cma[j][j]),cma[j][i]=ma;}for(int i=1;i<=m;++i){int l=read()%n+1,r=read()%n+1; if(l>r) swap(l,r);if(id[l]==id[r]){int ma=0; for(int i=l;i<=r;++i) ma=max(ma,c[i]);ans+=ma;}else ans+=max({cma[id[l]+1][id[r]-1],nm[l],pm[r]});}cout<<ans<<endl;
}
状压 11.24 s
#include<bits/stdc++.h>
using namespace std;
using llt=long long;
using llf=long double;
using ull=unsigned long long;
#define endl '\n'
#ifdef LOCALFILE *InFile=freopen("in_out/in.in","r",stdin),*OutFile=freopen("in_out/out.out","w",stdout);
#elseFILE *InFile=stdin,*OutFile=stdout;
#endifnamespace GenHelper{unsigned z1,z2,z3,z4,b;unsigned rand_(){b=((z1<<6)^z1)>>13; z1=((z1&4294967294U)<<18)^b;b=((z2<<2)^z2)>>27; z2=((z2&4294967288U)<<2)^b;b=((z3<<13)^z3)>>21; z3=((z3&4294967280U)<<7)^b;b=((z4<<3)^z4)>>12; z4=((z4&4294967168U)<<13)^b;return (z1^z2^z3^z4);}
}
void srand(unsigned x){using namespace GenHelper;z1=x; z2=(~x)^0x233333333U; z3=x^0x1234598766U; z4=(~x)+51;}
int read(){using namespace GenHelper;int a=rand_()&32767;int b=rand_()&32767;return a*32768+b;
}const int N=2e7+3,B=64,L=N/B+3;
#define id(p) (p+63>>6)
#define bl(i) (i-1<<6|1)
#define br(i) (i<<6)
int n,m,s,c[N],pm[N],nm[N],bln; unsigned long long ans,sta[N];class St{
private: const static int LG=19; int o[LG+3][L];
public:int &operator[](int p){return o[0][p];}void In(int l){for(int i=1;i<=LG;++i) for(int j=1;j+(1<<i)-1<=l;++j) o[i][j]=max(o[i-1][j],o[i-1][j+(1<<i-1)]);}int operator()(int l,int r){if(l>r) return 0; int k=__lg(r-l+1); return max(o[k][l],o[k][r-(1<<k)+1]);}
}st;void In(){int stk[N],*top;for(int i=1;i<=bln;++i){int ma=0; for(int j=bl(i);j<=br(i);++j) ma=max(ma,c[j]),pm[j]=ma;ma=0; for(int j=br(i);j>=bl(i);--j) ma=max(ma,c[j]),nm[j]=ma;st[i]=ma; top=stk;for(int j=bl(i);j<=br(i);++j){if(j!=bl(i)) sta[j]=sta[j-1];while(top!=stk&&c[*top]<=c[j]) sta[j]^=1ull<<(*top--)-bl(i);*++top=j,sta[j]|=1ull<<j-bl(i);}} st.In(bln);
}int Ma(int l,int r){int il=id(l),ir=id(r);if(il==ir) return c[l+__builtin_ctzll(sta[r]>>l-bl(il))];else return max({st(il+1,ir-1),nm[l],pm[r]});
}int main(){ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);cin>>n>>m>>s; srand(s);for(int i=1;i<=n;++i) c[i]=read(); bln=id(n),In();for(int i=1;i<=m;++i){int l=read()%n+1,r=read()%n+1; if(l>r) swap(l,r); ans+=Ma(l,r);}cout<<ans;
}

Kaguya 和 critno 他们好像搞了个支持修改的,但是做法过于优秀,感觉只有 YY 的作用了。

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

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

相关文章

2024-2025-1 20241301 《计算机基础与程序设计》第六周学习总结

|这个作业属于哪个课程|<2024-2025-1-计算机基础与程序设计(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)>| |这个作业要求在哪里|<2024-2025-1计算机基础与程序设计第六周作业](https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06)>| |这个作业的…

【UWP】让 UWP 自己托管自己 —— Windows App SDK 篇

众所周知,UWP 使用的窗口模型是 CoreWindow,但是 UWP 本身只是一个应用模型,所以完全可以创建 win32 窗口,那么我们可以不可以创建一个 win32 窗口,然后像 XAML 岛 (XAML Islands) 一样把 XAML 托管上去呢?本篇将讲述如何利用 WAS (Windows App SDK,俗称 WinUI3) 在 UWP…

【算法】记忆化搜索

[!TIP] 一种剪枝算法,优化运算效率,减少冗余计算基本内容入门例子 [P1028 [NOIP2001 普及组] 数的计算]([P1028 NOIP2001 普及组] 数的计算 - 洛谷 | 计算机科学教育新生态)题目要求:输入n,输出一共可以构造多少个数列,要求数列的第 i不能超过第i-1个数的一半 示例:输入6…

『模拟赛』NOIP2024模拟1

『模拟赛记录』NOIP2024模拟1Rank 有点可惜,A. 玩游戏 绝妙贪心题。感觉这种能产生很多假做法且都可 hack 的贪心都是好题。 赛时不知道为什么犯唐没交一开始的暴力贪心。 考虑双指针,设左右指针分别为 \(l,r\)。主要思路是实时维护当前两个指针向两边最近的一个区间和不为正…

2024-2025-1 20241312《计算机基础与程序设计》第6周学习总结

这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第六周作业)这个作业的目标 Polya如何解决问题 简单类型与组合类型 复合数据结构 查找与排序算法 算法复杂度 递…

工程师和科学家的高等数学及python实例:2三角函数 II

2 三角函数 II 学完本章内容后,你应该能够 ● 讨论反三角函数的图形 ● 讨论倒数函数的图形 ● 评估正弦、余弦和正切函数的变换 2.1 引言 本章将继续讨论三角函数,研究上一章中涉及的三个三角函数的倒数和反三角函数。本章还将讨论这些函数的变换。 2.2 三角函数的倒数 正弦…

搭建主从DNS服务器实现域名正逆向解析

1.前置工作:关闭防火墙及selinux 2.安装软件:yum install -y bind 3.本文仅搭建本地DNS实现逆向域名解析 1)建议复制逆向解析模板再进行修改 模板路径:/etc/named.rfc1912.zones 2)进入主配置文件并添加逆向配置文件 vim /etc/named.conf 注意:区域名称中IP地址反向书写,…

2024-2025-1 20241407《计算机基础与程序设计》第六周学习总结

这个作业属于哪个课程 [2024-2025-1计算机基础与程序设计](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)这个作业要求在哪里 2024-2025-1计算机基础与程序设计第六周作业这个作业的目标 学习Polya如何解决问题,简单类型与组合类型,复合数据结构,查找与排序算法…

Me-and-My-Girlfriend-1靶机渗透 (Vulnhub内网渗透)

一、Me-and-My-Girlfriend-1: 1、渗透目标: Description: This VM tells us that there are a couple of lovers namely Alice and Bob, where the couple was originally very romantic, but since Alice worked at a private company, "Ceban Corp", something …

pc大屏适配

在文件utils里配置 const baseSize = 12 //设置rem函数 function setRem() {//页面宽度相对于设计图宽的缩放比例,根据需要修改 1920(设计稿宽度)const scale = document.documentElement.clientWidth / 1920;// 设置页面根节点字体大小(match.min(scale,2)"指最高放大比…

高级语言程序设计第五次个人作业

2024高级语言程序设计:https://edu.cnblogs.com/campus/fzu/2024C 高级语言程序设计课程第五次个人作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13298 学号:102400111 姓名:蔡伟仡 8.11.18.11.28.11.38.11.48.11.58.11.68.11.78.11.89.11.19.11.29.11.39.11.49.11…

数据采集与融合技术实践作业三

数据采集与融合技术实践作业三 gitee链接:https://gitee.com/wei-yuxuan6/myproject/tree/master/作业3 作业① Scrapy爬取图片实验要求:指定一个网站,爬取这个网站中的所有的所有图片,例如:中国气象网(http://www.weather.com.cn)。使用scrapy框架分别实现单线程和多线…