首页 > 其他分享 >NOIP模拟 三元子序列计数

NOIP模拟 三元子序列计数

时间:2024-08-08 23:29:22浏览次数:15  
标签:遍历 log NOIP 计数 归约 序列 三元 倒序

题意

给一个长度为 \(n\) 的排列 \(a\),和一个 \(3\) 的排列 \(p\)。求问 \(a\) 有多少长度为 \(3\) 的子序列,满足将其中的元素从小到大编号后为 \(p\)。

思路

仔细手玩一下会发现很难找到一个对于任意 \(p\) 的通解,实际上 \(p\) 的情况可以做一些合并:

原 \(p\) 归约方法(对于 \(a\) 的变换) 归约至 \(p'\)
\(1,2,3\) 不需要归约 \(1,2,3\)
\(1,3,2\) 不需要归约 \(1,3,2\)
\(2,1,3\) \(a_i\) 变为 \((n+1)-a_i\),\(a\) 再倒序 \(1,3,2\)
\(2,3,1\) \(a\) 变为倒序 \(1,3,2\)
\(3,1,2\) \(a_i\) 变为 \((n+1)-a_i\) \(1,3,2\)
\(3,2,1\) \(a\) 变为倒序 \(1,2,3\)

因此,问题变为了只需要针对 \((1,2,3)\) 和 \((1,3,2)\) 的情况求解。

  • 求数列中大小顺序为 \((1,2,3)\) 的子序列,这是一个很典型的思路,我们遍历子序列的中心点,并用树状数组 \(O(\log n)\) 动态维护该点左右边的数,每次遍历到一个点 \(O(\log n)\) 查询该点左边比它小的和右边比他大的数有多少个,相乘即可得到以该点为中心点的满足大小顺序 \((1,2,3)\) 的子序列数。最后相加即可,整体时间复杂度 \(O(n\log n)\)。
  • 求数列中大小顺序为 \((1,3,2)\) 的子序列,经尝试后会发现很难用如上遍历中心点的思想来维护,此时其实可以考虑“减法原理”,即可以先求出 \((1,2,3)\) 和 \((1,3,2)\) 的子序列数之和之后再减去 \((1,2,3)\) 的子序列数。而求 \((1,2,3)\) 和 \((1,3,2)\) 的子序列数之和即是求中间右边大于左边的三元子序列数,此时只需要遍历最左侧点,树状数组动态维护右侧比该点大的数的个数,记为 \(k\),则符合要求的三元子序列显然为 \(\frac{k(k-1)}{2}\) 个。

标签:遍历,log,NOIP,计数,归约,序列,三元,倒序
From: https://www.cnblogs.com/SkyNet-PKN/p/18349940

相关文章

  • 洛谷:P1308 [NOIP2011 普及组] 统计单词数
    题目描述一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要......
  • 洛谷 P1019 [NOIP2000 提高组] 单词接龙 题解
    暴搜!!暴搜!!暴搜!!重要的事情说三遍#include<bits/stdc++.h>usingnamespacestd;constintN=25;intn,ans,use[N];strings,word[N];voiddfs(strings){intls=s.size();//s的lengthans=max(ans,ls);//求出最长的单词接龙for(inti=0;i<n......
  • 洛谷 P1125 [NOIP2008 提高组] 笨小猴
    [NOIP2008提高组]笨小猴题目描述笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设maxn......
  • 【题解】Solution Set - NOIP2024集训Day2 线段树
    【题解】SolutionSet-NOIP2024集训Day2线段树https://www.becoder.com.cn/contest/5431「CF1149C」TreeGenerator™结论:对于括号序列的一个子段,删去所有的匹配括号之后,剩下的不匹配的括号,按顺序构成树上的一条路径。Why?从括号序列的构造出发。每次(相当于开始遍历......
  • NOIP 2012 提高组初赛试题
    第1题目前计算机芯片(集成电路)制造的主要原料是(),它是一种可以在沙子中提炼出的物质。 A.硅 B.铜 C.锗 D.铝本题共1.5分第2题()是主要用于显示网页服务器或者文件系统的HTML文件内容,并让用户与这些文件交互的一种软件。 A.资源管理器 B.浏览器 C.......
  • 【题解】Solution Set - NOIP2024集训Day1 数据结构
    【题解】SolutionSet-NOIP2024集训Day1数据结构https://www.becoder.com.cn/contest/5429「CF1428F」FruitSequences线段树是可以维护区间最长子段的1。记固定右端点在\(i\),的答案为\(f_i\)。那么:\(a_i=0\),\(f_i=f_{i-1}\);\(a_i=1\),打一个单调栈维护所有的最长子......
  • 【CDQ分治】三元环
    三元环HDU-7439思路考虑\(3\)个点的有向图,要么成环,要么有一个点入度为\(2\),假设第个点的入度为\(d_i\),答案为\(C_n^3-\sum\limits_{i=1}^nC_{d_i}^2\)。根据题目关系,\(i\rightarrowj\)当且仅当\(i<j\and\f_i<f_j\and\g_i<g_j\),否则就是\(j\rightarrowi......
  • 凸多边形 k 划分计数
    凸多边形k划分计数给定\(n,k\),求凸\(n\)边形划分成\(k\)个不相交部分的方案数。sol先引入一个定理:Raney定理:和为\(1\)的整数序列的所有循环位移序列中有且仅有一个满足任意前缀和大于0。证明可以考虑任取一个循环位移序列,然后求前缀和,找到最靠右的前缀和最小的位......
  • 洛谷P1081【NOIP2012提高组】开车旅行
    题目见[NOIP2012提高组]开车旅行-洛谷(懒得打题目了)我们直接上代码#include<iostream>#include<cstdlib>#include<cstdio>#include<cmath>#include<cstring>#include<iomanip>#include<algorithm>#include<ctime>#include<queue>......
  • IEC104初学者教程,第九章:计数量召唤流程详解
    第九章:计数量召唤流程详解平时学习规约或调试IEC104或IEC101设备,需要IEC104/101模拟器,推荐一款:主站下载地址:IEC104主站模拟器从站下载地址:IEC104从站模拟器在IEC60870-5-104(简称IEC104)协议中,计数量召唤(CounterInterrogation,简称CI)是一种特定的功能,用于获取远程终端设备(RTU......