P10833 [COTS 2023] 下 Niz题解

news/2024/11/13 16:42:35/文章来源:https://www.cnblogs.com/allforgod/p/18544283

题意:
给定长度为 \(N\) 的序列 \(a\),求满足以下条件的 \((l,r)\) 对数:

  • \(1\le l\le r\le N\)

  • \(a_l,a_{l+1},\cdots,a_{r-1},a_r\)\(1\sim r-l+1\) 的排列。

  • \(1\le N\le 10^6\)\(1\le a_i\le N\)

思路

  • 首先,“排列”本身这个性质是很强的。因为排列本身需要从1开始,因此排列的数目必定不会很多。
    同时,只要我们知道了排列中最大的数,我们就知道了这个排列的长度。

  • 因此考虑去找区间中最大的数,然后去枚举区间的范围。在这个区间中,我们其实就将问题转化为了区间内的数的种类。只不过这里种类必须为区间长度。
    这种问题有一个很经典的转化,即维护一个数上一个与其值相同的数出现的位置,然后线段树去统计。
    不过这道题并不需要,因为我们只需要判断种类数是不是 \(n\) 就行了,因此可以用st表 \(O(1)\) 判断,只需要区间内所有数上一次出现的位置都小于区间左端点就行了。

  • 处理完最大值后就可以继续向两边递归去找。

复杂度

  • 这里的时间复杂度与启发式合并比较类似,平摊下来总体是 \(O(nlogn)\) 的。

code

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
int n,a[N],g[N][20],lst[N],lg[20];long long ans=0;
struct node
{int val,loc;
}f[N][20];
node maxx(node x,node y){return x.val>=y.val?x:y;}
void init()
{lg[0]=-1;for(int i=1;i<=n;i++) lg[i]=lg[i/2]+1;for(int i=1;(1<<i)<=n;i++)for(int j=1;j+(1<<i)-1<=n;j++)f[j][i]=maxx(f[j][i-1],f[j+(1<<(i-1))][i-1]),g[j][i]=max(g[j][i-1],g[j+(1<<(i-1))][i-1]);
}
node fmax(int l,int r){int x=lg[r-l+1];return maxx(f[l][x],f[r-(1<<x)+1][x]);}
int  gmax(int l,int r){int x=lg[r-l+1];return max (g[l][x],g[r-(1<<x)+1][x]);}
bool query(int l,int r){return gmax(l,r)<l;}
void solve(int l,int r)
{if(r<l) return;if(l==r) {ans+=(a[l]==1);return;}node mval=fmax(l,r);if(mval.loc-l<=r-mval.loc) for(int i=max(l,mval.loc-mval.val+1),j=i+mval.val-1;i<=mval.loc&&j<=min(r,mval.loc+mval.val-1);++i,++j) ans+=query(i,j);else for(int j=mval.loc,i=j-mval.val+1;i<=mval.loc,j<=min(r,mval.loc+mval.val-1);++i,++j) if(i<l) continue;else ans+=query(i,j);solve(l,mval.loc-1),solve(mval.loc+1,r);
}
int main()
{ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n;i++) {cin>>a[i];f[i][0]={a[i],i},g[i][0]=lst[a[i]],lst[a[i]]=i;}init();solve(1,n);cout<<ans<<'\n';return 0;
}

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

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

相关文章

数据库查询第5到8行的数据

limit 4 表示要返回的行数为4 offset 4表示从结果集的第5行开始

CW 11.13 模拟赛 T3 大方和小方

算法 可以看出来是组合数学, 但是考场上时间不够 + 本身也没做过组合数学, 放弃了经过人类智慧的推导 由 \(\rm{Subtask} 1\) 可得基础柿子 令 $ a = b_2 - d_1 , b = a_2 - c_1 $ 插空法可知答案为 \(a + b \choose a\)代码 略 总结 注意组合数学的 \(\sum\) 有些时候可以化成…

NOIP 模拟赛:2024-11-11

T1:法一:\(O(n^2)\) 的 DP。\(dp[i][j][0/1]\) 表示在 \(i\) 的子树内染色,\(i\) 是红/黑,使得每个要求的结点的黑点个数都等于 \(j\)。 法二:\(O(n)\) 的神秘做法。取出最浅的被要求结点,把深度 \(\le\) 它的都染成黑色,其余点都染成红色。 T2: 对于一个元素属于 \([0…

[自用]ubuntu下kafka环境的搭建

首先安装了OpenJDK https://segmentfault.com/a/1190000044953489 没有配置默认的Jave版本 没有设置JAVA_HOME环境变量 补充:设置JAVE_HOME环境变量在图形界面中打开etc\environment文件,在其中追加JAVA_HOME变量(注意java版本和路径等的名称)保存后关闭,在终端里使用sour…

Java学习之定时任务框架Quartz

Quartz 的核心类有以下三部分:Job : 需要实现的任务类,实现 execute() 方法,执行后完成任务。Trigger : 包括 SimpleTrigger 和 CronTrigger。Scheduler : 任务调度器,负责基于 Trigger触发器,来执行 Job任务。 简单示例 1.pom配置 2.创建Jobpublic class EplJob imple…

比 Copilot 快两倍以上!在我的开源项目 AI Godot 桌宠中用通义灵码解决问题

Qwen 开源模型在开源榜单上大杀四方,所以不得心生几分好感,通义灵码底层基于 Qwen2.5 最新模型,代码补全和问答能力全面升级。本文作者:plzpj6bp7mjr4,内容选自通义灵码超级个体创新实践大赛,并对部分内容做了微调,感谢作者分享的最佳实践! 最近,阿里的开源大模型刷屏…

vue3开发扫雷游戏,支持调整难度,支持计时

闲来练习练习js,写了个扫雷游戏,直接拿去复制粘到自己本地某个html文件里就能运行,记得把vue加载地址改成线上的~~ 有空了可以再加上计分板 运行起来长下面这样 直接上代码1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset=…

记一次potplayer播放视频错误

如图,播放存在问题解决方式,打开potplayer->选项->滤镜然后更换系统解码器即可作者:qbning出处:http://www.cnblogs.com/qbning/-------------------------------------------个性签名:曾经的我们空有一颗望海的心,却从没为前往大海做过真正的努力如果觉得这篇文章…

【大模型评测】国内外主流评测基准分析(图)

附件 1.作者:Syw 2.出处:http://www.cnblogs.com/syw20170419/ 3.本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 4.如果文中有什么错误,欢迎指出。以免更多的人被误导。

(系列十一)Vue3框架中路由守卫及请求拦截(实现前后端交互)

说明该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。 友情提醒:本篇文章是属于系列文章,…

MIGO DUMP LCX_RAP_EVENT_RUNTIME CL_RAP_EVENT_MANAGER==========CP

MIGO 收货时发生DUMP运行事务代码:SBGRFCCONF 创建入站目标输入目标BGPF 保存即可TRANSLATE with xEnglishArabic Hebrew PolishBulgarian Hindi PortugueseCatalan Hmong Daw RomanianChinese Simplified Hungarian RussianChinese Traditional Indonesian SlovakCzech Ital…