E. Monotonic Renumeration

news/2024/9/22 11:04:55/

链接 : 

Problem - E - Codeforces

思路 : 

区间合并 + 快速幂

对于a[0],那么从第一个a[0],到最后一个a[0]这个区间内所有b值全部为b[0] = 0,以此类推,对于其他值也是一样;

例如对于[1 , 2 , 1 , 2 , 3]

首先b[0] = 0(题目要求) , 然后因为a[2] = a[0] ,那么b[2]=b[0] = 0;

要求bi+1=bi 或 b[i+1]=b[i]+1 , 那么b[1]夹在两个0之间,只能为0 , 同理b[3] = b[1] = 0 ;

对于b[4] = b[3] = 0 , 或b[4] = b[3] + 1 ;

依此 : 我们要求一个区间数量,每两个区间要满足无相同值,这里先求出每个值出现的范围,然后左端点排序,然后进行合并 , 得到区间数量t;

然后ans 等于2的(t-1)次方(由于b[0]已经固定为1,后面一个区间可以取上一个区间+0/+1的值)

代码

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
#define int long long 
typedef long long LL;
const LL mod = 998244353;
const int N = 2e5+10;
typedef pair<int, int> PII;LL qmi(LL m, LL k,LL p){LL res = 1 % p, t = m;while (k){if (k&1) res = res * t % p;t = t * t % p;k >>= 1;}return res%p;}void merge(vector<PII> &segs){vector<PII> res;sort(segs.begin(), segs.end());int st = -2e9, ed = -2e9;for (auto seg : segs)if (ed < seg.first){if (st != -2e9) res.push_back({st, ed});st = seg.first, ed = seg.second;}else ed = max(ed, seg.second);if (st != -2e9) res.push_back({st, ed});segs = res;
}inline void solve(){// 详细地址 : https://codeforces.com/contest/1102/submission/259938745 int n ; cin >> n ; vector<int> a(n+1) ; vector<PII> b; set<int> st ; map<int,vector<int>> mp ;for(int i=1;i<=n;i++) cin >> a[i] ,mp[a[i]].push_back(i) ;for(int i=1;i<=n;i++){if(st.count(a[i])) continue ;b.push_back({i,mp[a[i]].back()}) ;st.insert(a[i]) ;}merge(b) ;//区间合并 int t = b.size() - 1 ;LL ans = qmi(2,t,mod) ;//快速幂 cout << ans << endl ;
}signed main(){IOSint _ = 1;while(_ --) solve();return 0;
}


http://www.ppmy.cn/news/1457989.html

相关文章

支持LLM的Markdown笔记;ComfyUI-HiDiffusion图片生成和对图像进行高质量编辑

✨ 1: ComfyUI-HiDiffusion ComfyUI-HiDiffusion是一个为HiDiffusion技术使用而定制的节点。HiDiffusion技术是专门用于在计算机视觉和图像处理中生成和改进图片质量的先进算法。该技术通常应用于图像的超分辨率、去噪、风格转换等方面。 ComfyUI-HiDiffusion的主要特点包含提…

Web3 ETF软件开发

开发Web3 ETF软件涉及到金融、法律和技术等多个领域的专业知识&#xff0c;因此存在以下技术难点&#xff0c;开发Web3 ETF软件是一项复杂的技术挑战&#xff0c;需要综合考虑各种因素。开发人员需要具备较强的技术能力和跨学科知识才能成功开发Web3 ETF软件。北京木奇移动技术…

炫酷Chrome:插件大礼包

Chrome浏览器以其强大的功能和丰富的扩展插件库而闻名。 其中&#xff0c;有些插件专为提升用户的浏览体验而设计&#xff0c;例如更换Chrome网页背景图、自定义鼠标点击样式&#xff0c;以及提供便捷的页面跳转工具等。 最近&#xff0c;有一款被称为“宝藏插件包”的工具引…

泛微OA表单调用JSP

表单插入JS代码,并且设置id,传入表单参数给后端,后端添加jsp文件,使用ajax调用,详细步骤如下: 对应的框内添加id属性,如下图: 然后插入js代码,代码如下: <script> jQuery(document).ready(function() {// 在表单的按钮单元格插入自定义属性:ID:btnLinkvar …

【优选算法】——Leetcode——611. 有效三角形的个数

目录 ​编辑 1.题目 2 .补充知识 3.解法⼀&#xff08;暴⼒求解&#xff09;&#xff08;可能会超时&#xff09;&#xff1a; 算法思路&#xff1a; 算法代码&#xff1a; 4.解法⼆&#xff08;排序双指针&#xff09;&#xff1a; 算法思路&#xff1a; 以输入: nums …

一分钟教你学浪app视频怎么缓存

你是否在学浪app上苦苦寻找如何缓存视频的方法&#xff1f;你是否想快速、轻松地观看自己喜欢的视频内容&#xff1f;那么&#xff0c;让我们一起探索一分钟教你如何缓存学浪app视频的技巧吧&#xff01; 学浪下载工具我已经打包好了&#xff0c;有需要的自己下载一下 学浪下…

若依分离版-前端使用echarts组件

1 npm list:显示已安装的模块 该命令用于列出当前项目的所有依赖关系&#xff0c;包括直接依赖和间接依赖。执行 npm list 时&#xff0c;npm 将从当前目录开始&#xff0c;递归地列出所有已安装的模块及其版本信息 npm list 2 npm outdated:用于检查当前项目中的npm包是否有…

给网站网页PHP页面设置密码访问代码

将MkEncrypt.php文件上传至你网站根目录下或者同级目录下。 MkEncrypt.php里面添加代码&#xff0c;再将调用代码添加到你需要加密的页进行调用 MkEncrypt(‘123456’);括号里面123456修改成你需要设置的密码。 密码正确才能进去页面&#xff0c;进入后会存下cookies值&…