樱花下落的速度(区间放缩,思维)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

已知一朵樱花有 n 枚花瓣,每一枚花瓣各不相同。将它们用一个长为 n 的排列编号。

我们根据一朵樱花的编号来认定它的特征:

每一个排列均具有两组特征码 fa,fb。其中,fai​ 表示排列 p 中第 1 个到第 i 个数的 MEX(前缀 MEX⁡),fbi 表示排列 p 中第 i 个到第 n 个数的 MEX(后缀 MEX⁡)。fa 由 fa1,fa2,⋯ ,fan 组成,fb 由 fb1,fb2,⋯ ,fbn​ 组成。如果存在两个排列的特征码 fa ,fb 均完全相同,那么我们就认为它们具有相同的特征。

现在,在贵树的手中有一朵樱花,他希望你求出有多少个排列和当前这个樱花的排列特征相同?

由于结果可能很大,所以你的答案需要对 109+710^9+7109+7 取模。

输入描述:

第一行输入一个整数 n(1≤n≤2×105)。第二行输入 n 个整数,输入一个排列 p1,p2,⋯ ,pn(0≤pi<n,1≤i≤n),表示贵树手里的樱花的特征。保证 p1,p2,⋯ ,pn​ 是一个排列。

输出描述:

输出一个整数,代表有多少个排列和该排列特征相同(包括原排列本身),答案对 10^9+7 取模。

示例1

输入

5
3 1 0 4 2

输出

1

示例2

输入

7
0 6 5 4 3 2 1

输出

120

备注:

 

长为 n 的排列指一个长为 n 的序列,其中 0,1,⋯ ,n−1 均出现且仅出现 1 次。例如,(0,3,2,1,4) 是一个长为 5 的排列而 (1,2,4) 不是排列。

MEX⁡ 表示的是一个序列中没有出现的最小的自然数。例如,MEX⁡(1,2,3,4,5)=0,MEX(0,1,2,3,3,5,6,7)=4。

 解析:

B[i]:表示记录数字 i 在序列中的位置

left:记录前 i 小的数字的最小位置

right:记录前 i 小的数的最大位置

数字 i 可放在位置 left~right 之间,但由于前面已经有了 i-1 个确定位置的数,应次数字实际上可以放置的位置数量是 (right-left+1)-(i-1).

这里的前 i-1 个数字一定会在 left~right 之间,因为如果前面的数字位置是一定的,那么由于left=min(left,B[j]),right=max(right,B[j]),所以  left~right 之间一定包含 j 的位置;如果数字 j 的位置是不确定的,那么数字 j 也一定是在  left~right 之间选择位置。

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>
#include<sstream>
#include<deque>
#include<unordered_map>
#include<unordered_set>
#include<bitset>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<long long, long long> PLL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
const int INF = 0x3f3f3f3f;
const LL Mod = 1e9 + 7;
const int N = 2e5 + 10, M = 4e5 + 10, P = 110;
int n;
int B[N];int main() {cin >> n;for (int i = 1; i <= n; i++) {int a;scanf("%d", &a);B[a+1] = i;}int left = n + 1, right = 0;LL ret = 1;for (int i = 1; i <= n; i++) {left = min(left, B[i]), right = max(right, B[i]);if (B[i] != left && B[i] != right) {(ret *= (right - left + 1) - (i - 1)) %= Mod;}}cout << ret << endl;return 0;
}

 

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

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

相关文章

YOLOv9训练损失、精度、mAP绘图功能 | 支持多结果对比,多结果绘在一个图片(消融实验、科研必备)

一、本文介绍 本文给大家带来的是YOLOv9系列的绘图功能&#xff0c;我将向大家介绍YOLO系列的绘图功能。我们在进行实验时&#xff0c;经常需要比较多个结果&#xff0c;针对这一问题&#xff0c;我写了点代码来解决这个问题&#xff0c;它可以根据训练结果绘制损失(loss)和mA…

使用官方代码打印yolov8 PyTorch模型结构

理解模型结构的重要性 在进行深度学习模型的开发时&#xff0c;一个清晰的模型结构有助于理解网络是如何从输入数据中提取特征&#xff0c;并执行分类或回归任务的。对于如YOLOv8这样的复杂模型来说&#xff0c;理解每个层的作用和相互间的连结尤为重要。 下面是我整合的代码…

ORACLE创建表空间及用户

创建用户之前需要先为用户创建表空间。 创建临时表空间&#xff1a;Oracle 临时表空间用于存储数据库操作过程中的临时数据&#xff0c;例如排序、哈希操作或者大查询的中间结果。临时表空间主要用于保证用户会话中的操作不会影响到系统的稳定性。 #用管理员登入数据库。 sq…

React的Key和diff

React的Key 先说说React组件的中Key,在渲染一个列表的时候,都要求设置一个唯一的Key,不然就会提示:Each child in a list should have a unique "key" prop. 意思是列表的每一个子元素都应该需要设置一个唯一的key值。在开发中一搬会以id作为key。比如 const …

Java的八大基本数据类型和 println 的介绍

前言 如果你有C语言的基础&#xff0c;这部分内容就会很简单&#xff0c;但是会有所不同~~ 这是我将要提到的八大基本数据类型&#xff1a; 注意&#xff0c;Java的数据类型是有符号的&#xff01;&#xff01;&#xff01;和C语言不同&#xff0c;Java不存在无符号的数据。 整…

Day:动态规划 LeedCode 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

123. 买卖股票的最佳时机 III 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再次购买前出售掉之前的股票&a…

安全开发实战(2)---域名反查IP

目录 安全开发专栏 前言 域名与ip的关系 域名反查ip的作用 1.2.1 One 1.2.2 Two 1.2.3 批量监测 ​总结 安全开发专栏 安全开发实战http://t.csdnimg.cn/25N7H 这步是比较关键的一步,一般进行cdn监测后,获取到真实ip地址后,或是域名时,然后进行域名反查IP地址,进行进…

基于Springboot的职称评审管理系统

基于SpringbootVue的职称评审管理系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 评审条件 论坛信息 系统公告 后台登录页面 用户管理 评审员管理 省份…

再谈C语言——理解指针(四)

assert断⾔ assert.h 头⽂件定义了宏 assert() &#xff0c;⽤于在运⾏时确保程序符合指定条件&#xff0c;如果不符合&#xff0c;就报错终⽌运⾏。这个宏常常被称为“断⾔”。 assert(p ! NULL); 上⾯代码在程序运⾏到这⼀⾏语句时&#xff0c;验证变量 p 是否等于 NULL 。…

​LeetCode解法汇总2385. 感染二叉树需要的总时间

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一棵二叉树的根节点 root &#xff0…

Linux-System V共享内存

目录 System V共享内存共享内存概述创建或打开共享内存使用共享内存分离共享内存控制共享内存1、IPC_STAT2、IPC_SET 代码示例 System V共享内存 共享内存概述 共享内存是所有IPC中最快的一种。它之所以快是因为共享内存一旦映射到进程的地址空间&#xff0c;进程之间数据的传…

创建型设计模式

七大原则 1. 开闭原则&#xff08;Open-Closed Principle, OCP&#xff09; 详解&#xff1a;软件实体&#xff08;类、模块、函数等&#xff09;应该易于扩展&#xff0c;但是不易于修改。换句话说&#xff0c;当软件需求变化时&#xff0c;应该通过添加新代码来实现变化&am…

CSP初赛知识精讲--排列组合

第十一节 排列组合 基础知识 排列是指从给定个数的元素中取出指定个数的元素进行排序。  组合是指从给定个数的元素中仅仅取出指定元素个数的元素&#xff0c;不考虑排序。  排列组合问题的关键就是研究给定要求的排列和组合可能出现的情况的总数。 定义与公式  排列&…

销冠必备:高效跟进客户的四个技巧

作为一名销售&#xff0c;高效而精准地跟进客户是取得成功的关键。今天&#xff0c;我将分享四个技巧&#xff0c;让你也能够高效的跟进客户。 1、善于发问 通过多询问客户&#xff0c;你可以更好地了解客户的需求和痛点。在与客户交流时&#xff0c;不要只是简单地回答问题&…

LeetCode 0216.组合总和 III:回溯(剪枝) OR 二进制枚举

【LetMeFly】216.组合总和 III&#xff1a;回溯(剪枝) OR 二进制枚举 力扣题目链接&#xff1a;https://leetcode.cn/problems/combination-sum-iii/ 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返…

业务复习知识点Oracle查询

业务数据查询-1 单表查询 数据准备 自来水收费系统建表语句.sql 简单条件查询 精确查询 需求 &#xff1a;查询水表编号为 30408 的业主记录 查询语句 &#xff1a; select * from t_owners where watermeter 30408; 查询结果 &#xff1a; 模糊查询 需求 &#xff1a;查询业…

毕业设计注意事项(2024届更新中)

1.开题 根据学院发的开题报告模板完成&#xff0c;其中大纲部分可参考资料 2.毕设 根据资料中的毕设评价标准&#xff0c;对照工作量 3.论文 3.1 格式问题 非常重要&#xff0c;认真对比资料中我发的模板&#xff0c;格式有问题&#xff0c;答辩输一半&#xff01; 以word…

W801学习笔记十四:掌机系统——菜单——尝试打造自己的UI

未来将会有诸多应用&#xff0c;这些应用将通过菜单进行有序组织和管理。因此&#xff0c;我们需要率先打造好菜单。 LCD 驱动通常是直接写屏的&#xff0c;虽然速度较快&#xff0c;但用于界面制作则不太适宜。所以&#xff0c;最好能拥有一套 UI 框架。如前所述&#xff0c;…

【linux】编译器使用

目录 1. gcc &#xff0c;g 编译器使用 a. 有关gcc的指令&#xff08;g同理&#xff09; 2. .o 文件和库的链接方式 a. 链接方式 b. 动态库 和 静态库 优缺点对比 c. debug 版本 和 release 版本 1. gcc &#xff0c;g 编译器使用 a. 有关gcc的指令&#xff08;g同理&…

设计模式-创建型-抽象工厂模式-Abstract Factory

UML类图 工厂接口类 public interface ProductFactory {Phone phoneProduct();//生产手机Router routerProduct();//生产路由器 } 小米工厂实现类 public class XiaomiFactoryImpl implements ProductFactory {Overridepublic Phone phoneProduct() {return new XiaomiPhone…