AcWing 构造数组 区间合并

在这里插入图片描述在这里插入图片描述

思路:
这道题第一眼来看以为是动态规划类型的题目,然而尝试了用dp的方法做,然而超时了,过了差不多一半的测试店,显示的是超时。那么应该来说动态规划是可以做的,但数据卡的比较严。在看其他同学的评论后,使用KMP算法也会使得部分测试点超时。

听完讲解后,发现大佬是通过区间合并的方法实现的。

由题意可知,若a[i]等于a[j],则b[i]和b[j]也必须是相同的,而数组b是非递减的,此时数组b中第i到j项的元素必须是相同的,才能符合题目要求。所以我们要统计这样的区间的个数。运用区间合并的方法,得出最后的区间数为k。两个相邻区间之间有2种变化方式,因此总可能数是2的k-1次方个。

参考代码:

#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long ll;
vector<pair<int, int>> v;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin >> n;unordered_map<int, int> l(300000), r(300000);int num[200005];for (int i = 0; i < n; i++){cin >> num[i];r[num[i]] = i;}for (int i = n - 1; i >= 0; i--)l[num[i]] = i;for (auto it = l.begin(); it != l.end(); it++){v.push_back({ it->second, r[it->first] });}sort(v.begin(), v.end());int cnt = 0;int bg = -1e9, ed = -1e9;for (int i = 0; i < v.size();i++)  //区间合并{if (ed < v[i].first){if (ed != -1e9) cnt++;bg = v[i].first, ed = v[i].second;}else if (ed < v[i].second){ed = v[i].second;}}if (bg != -1e9 && ed != -1e9) cnt++;int res = 1;for (int i = 1; i < cnt; i++){res = res * 2 % 998244353;}cout << res;return 0;
}

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

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

相关文章

为什么需要动态SQL

为什么需要动态SQL在使用 EF或者写 SQL语句时&#xff0c;查询条件往往是这样一种非常常见的逻辑&#xff1a;如果客户填了查询信息&#xff0c;则查询该条件&#xff1b;如果客户没填&#xff0c;则返回所有数据。我常常看到很多人解决这类问题时使用了错误的静态 SQL的解决办…

PAT Family Property DFS+哈希

题目链接 思路&#xff1a; 本题将每个人作为一个单独的结点&#xff0c;若两个人之间是家人关系&#xff0c;则建立边关系。通过哈希法建立人名与编号&#xff0c;编号与人名之间的映射。最后统计每个家庭的人数时&#xff0c;用DFS遍历即可。 对于本题我犯过两个错误&#…

【好文】为什么必须学好.Net Core?怎样弯道超车新年高薪?这样做,一周就够了!(文末彩蛋)...

都2020了你还不会.Net Core&#xff1f;恕我直言&#xff0c;2020年还不会.Net Core是会被淘汰的&#xff01;12月3号&#xff0c;.Net Core3.1的LTS版正式发布&#xff0c;4年来7个正式版本和几十个Preview版本&#xff0c;热烈可见一斑&#xff01;越来越多的互联网软件公司开…

最短路径SPFA和Bellman-Ford算法

参考模板&#xff1a; #include<bits/stdc.h> using namespace std; #define INF 0x3f3f3f3f typedef long long ll;struct node {int v, dis;node(int v, int dis) {this->v v, this->dis dis;} }; vector<node> adj[1005]; int n, d[1005], num[1005]; …

基于 Kubernetes 的基础设施即代码

11 月 9、10 号两天&#xff0c;.NET 社区第一次以“.NET 大会”为品牌在上海召开了第一届峰会&#xff0c;现场与会者达到 600 人规模。大会的第 1 天是各类演讲分享&#xff0c;第 2 天有多个动手实践课。张善友队长、 刘腾飞 和我一起策划了基于 Kubernetes 的 .NET Core 微…

最小生成树Prim和Kruskal算法

两种算法都是基于贪心的方法。 Prim算法&#xff1a; 适用于稠密图。时间复杂度为O(V^2)。(V为顶点数&#xff09; 与Dijkstra算法相似&#xff0c;每次选择离离原点最近的点&#xff0c;加入到现有的生成树中。 Kruskal算法&#xff1a; 适用于稀疏图。时间复杂度为O(E*logE)…

Steeltoe 2.4新增代码生成工具、全新入门指南等,助力.NET微服务开发

Steeltoe框架现可帮助.NET开发人员创建云原生应用。随着其功能的扩充&#xff0c;该框架越来越受欢迎&#xff0c;下载量达到580万&#xff08;并且仍在增加&#xff09;&#xff0c;这其中大部分的功能创新都源自于用户反馈、社区贡献和.NET运行环境各方面的改进。但这些还不够…

AcWing 自动补全 二分

题目链接 先上AC代码。 参开代码&#xff1a; #include<bits/stdc.h> #include<unordered_map> using namespace std; #define INF 0x3f3f3f3f typedef long long ll;string s[100005]; unordered_map<string, int> m; bool check(string a, string b) {if…

2019 年终回顾:不忘初心,负重前行

点击上方蓝字关注“汪宇杰博客”导语2019 年就要接近尾声&#xff0c;这一年对于我来说&#xff0c;有许多有意义的事件。我成长了许多&#xff0c;并依然保持着对技术的热情。在辞旧迎新之际&#xff0c;我想回顾一下我这一年中有意义的事件与收获&#xff0c;期待与大家一起在…

机试真题1 反序输出 cin判断读取结束

题目链接 解题思路 这题是纯纯的送分题&#xff0c;但我忘记了怎么判断读取结束。应该用&#xff1a; while (cin >> s){}在Windows中&#xff0c;CtrlZ输出输入结束符号。 参考代码 #include<bits/stdc.h> using namespace std;void print(string s) {int len…

【C#】设计模式的学习征途系列文章目录(2019版)

Photo &#xff1a;Design Patterns文 | Edison Zhou2017年&#xff0c;我开始系统学习设计模式&#xff0c;参考了《大话设计模式》、《设计模式的艺术》等书籍&#xff0c;并通过C#语言写了各种模式的代码示例&#xff08;已经放到了我的github上并收获了120个star&#xff0…

机试真题2 进制转换 高精度除法

题目链接 解题思路 这题需要通过高精度加除法来解决。原本以为高校机试题最多考到高精度的加减法&#xff0c;没想到还会考高精度和低精度的乘除法&#xff0c;不亏是你清的题。 需要注意的是&#xff0c;一开始存储需要是逆序存储&#xff0c;方便后面的操作&#xff0c;同时…

原创 | 为什么年终奖是一个彻头彻尾的职场圈套?

0前言之前写过几篇职场专题的文章&#xff0c;反响不错&#xff0c;也先后被不少公众号转载过&#xff0c;这几天来了不少新朋友&#xff0c;如果之前没阅读过&#xff0c;可以在后台回复“职场”2个字&#xff0c;查看系列文章。转眼又到年底了&#xff0c;不知道有多少人在心…

机试真题3 进制转换2 高精度除法

题目链接 解题思路 这题还是通过高精度的除法来做&#xff0c;思路与上一篇文章类似&#xff0c;区别就是输入输出的进制位数不是固定的。对于输入的进制m&#xff0c;在divide函数中更新余数的时候乘以的数字改成m&#xff1b;对于输出的进制n&#xff0c;在divide函数中取余…

Blazor 机制初探以及什么是前后端分离,还不赶紧上车?

上一篇文章发了一个 BlazAdmin 的尝鲜版基于 Blazui 的 Blazor 后台管理模板 BlazAdmin 正式尝鲜&#xff0c;这一次主要聊聊 Blazor 是如何做到用 C# 来写前端的&#xff0c;传送门&#xff1a;https://www.cnblogs.com/wzxinchen/p/12057171.html飚车前需要说明的一点是&…

机试真题4 成绩排序

题目链接 解题思路 题目非常简单&#xff0c;就是需要注意一下直接用sort方法做的话&#xff0c;会导致同分时输出的人名顺序与输入时不一致&#xff0c;这是因为sort函数是不稳定的算法&#xff08;sort排序为了提升性能&#xff0c;会根据不同的情况选用不同的排序算法&…

云原生

一、云原生概念的诞生云原生&#xff08;Cloud Native&#xff09;的概念&#xff0c;由来自Pivotal的MattStine于2013年首次提出&#xff0c;被一直延续使用至今。这个概念是Matt Stine根据其多年的架构和咨询经验总结出来的一个思想集合&#xff0c;并得到了社区的不断完善&a…

基于 Kubernetes 的 CICD 基础设施即代码

在上一篇基于 Kubernetes 的基础设施即代码一文中&#xff0c;我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊 使用的基础设施是如何使用代码描述的&#xff0c;以及它的自动化执行过程。如果要查看基于 Kubernetes 的基础设施即代码架构全图&…

Azure Arc:微软是怎么玩多云游戏的?

混合云在竞争性云提供商的基础上提供了来自云提供商的服务&#xff0c;从而使组织能够以不同方式一起使用来自不同供应商的云服务。例如&#xff0c;组织可以使用将数据存储在一个云中存储上的功能&#xff0c;而另一个云服务商则在该应用程序或数据之上运行。因此&#xff0c;…

当我们在谈 .NET Core 跨平台时,我们在谈些什么?--学习笔记

摘要.NET Framework在过去十多年在跨平台上的尝试。.NET Core跨平台的实现有何不同&#xff1f;基于 .NET Standard的平台兼容性是如何实现的&#xff1f;讲师介绍历史枷锁.NET Framework FCL CLR"跨平台"的 .NET Framework完全独立&#xff0c;各自为政复用之殇由…