二分+滑窗,CF 1208B - Uniqueness

server/2024/10/9 6:45:33/

目录

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

B - Uniqueness


二、解题报告

1、思路分析

观察单调性:对于合法的删除区间 [l, r] r 右移,l 要么右移要么不动,一定不左移

我们考虑二分

二分删除区间的长度 x

我们 枚举r,维护l,哈希表mp 存储 [l, r] 外元素出现次数

如果 mp 的 size 等于 n - (r - l + 1),那么次数合法,我们尝试右收缩左边界

只要收缩过程中 n - (r - l + 1) <= m,我们就返回true

2、复杂度

时间复杂度: O(NlogN)空间复杂度:O(N)

3、代码详解

 ​
#include <bits/stdc++.h>// #define DEBUGusing u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;constexpr int inf32 = 1E9 + 7;
constexpr i64 inf64 = 1E18 + 7;struct custom_hash {static u64 splitmix64(u64 x) {x ^= x << 13;x ^= x >> 7;x ^= x << 17;return x; }size_t operator () (u64 x) const {static const u64 FIXED_RANDOM = std::chrono::steady_clock::now().time_since_epoch().count(); // 时间戳return splitmix64(x + FIXED_RANDOM);}
};using safemap = std::unordered_map<u64, u64, custom_hash>;void solve() {int n;std::cin >> n;std::vector<int> a(n);safemap st;for (int i = 0; i < n; ++ i) {std::cin >> a[i];++ st[a[i]];}if (st.size() == n) {std::cout << "0\n";return;}auto check = [&](int m) -> bool{safemap mp = st;for (int r = 0, l = 0; r < n; ++ r) {if (!-- mp[a[r]])mp.erase(a[r]);while (mp.size() == n - (r - l + 1)) {if (r - l + 1 <= m) return true;if (!-- mp[a[l]])mp.erase(a[l]);++ l;}}return false;};int lo = 0, hi = n;while (lo < hi) {int x = (lo + hi) / 2;if (check(x)) hi = x;else lo = x + 1;}std::cout << hi << '\n';
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);#ifdef DEBUGint cur = clock();freopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#endifint t = 1;// std::cin >> t;while (t--) {solve();}
#ifdef DEBUGstd::cerr << "run-time: " << clock() - cur << '\n';
#endifreturn 0;
}


http://www.ppmy.cn/server/129150.html

相关文章

Docker实践与应用举例

Docker 是一种开源的容器化平台&#xff0c;允许开发者将应用程序及其依赖打包在一个轻量级的容器中运行。容器可以在任何环境中保持一致的运行状态&#xff0c;从而极大地简化了开发、测试和部署过程。接下来&#xff0c;我将详细介绍 Docker 的实践与应用举例。 1. Docker 的…

使用 Docker 制作 YashanDB 镜像:深度解析与实战指南

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云/阿里云/华为云/51CTO&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互…

【大学学习-大学之路-回顾-电子计算机相关专业-学习方案-自我学习-大一新生(1)】

【大学学习-大学之路-回顾-电子&计算机相关专业-学习方案-自我学习-大一新生&#xff08;1&#xff09;】 1-前言2-整体说明&#xff08;1&#xff09;打字训练&#xff08;1&#xff09;字母区分大小写&#xff1a;&#xff08;2&#xff09;自动换行&不自动换行&…

【Hadoop】改一下core-site.xml和hdfs-site.xml配置就可以访问Web UI

core-site.xml&#xff1a; hdfs-site.xml&#xff1a; 所有的都改为0.0.0.0 就可以访问Web UI 原因&#xff1a; 使用 0.0.0.0 作为绑定地址时&#xff0c;实际会将服务监听在所有可用的网络接口上。这意味着&#xff0c;任何从外部访问的请求都可以通过任何网络适配器连接到…

认识动态规划算法和实践(java)

前言 动态规划算法里面最有意思的一个东西之一。动态规划初学肯定会有一定晦涩难懂。如果我们去网上搜索&#xff0c;动态规划的资料&#xff0c;它一开始都是将很多的理论&#xff0c;导致会认为很难&#xff0c;但是这个东西实际上是有套路的。 动态规划的英语是Dynamic Pr…

15分钟学 Python 第38天 :Python 爬虫入门(四)

Day38 : Python爬虫异常处理与反爬虫机制 章节1&#xff1a;异常处理的重要性 在爬虫开发过程中&#xff0c;网络请求和数据解析常常会遭遇各种异常。正确的异常处理可以提高程序的稳定性&#xff0c;避免崩溃&#xff0c;并帮助开发者快速定位问题。 章节2&#xff1a;常见…

四、Python基础语法(数据类型转换)

数据类型转换就是将一种类型的数据转换为另外一种类型的数据&#xff0c;数据类型转换不会改变原数据&#xff0c;是产生一个新的数据。 变量 要转换为的类型(原数据) -> num int(28) 一.int()将其他类型转换为整型 1.整数类型的字符串转换为整型 num1 28 print(type…

ruoyi-python 若依python版本部署及新增模块【问题解决】

ruoyi spring版本支持一键导出前后端代码&#xff0c;且b站上有很多教程&#xff0c;但是发现python版本的教程并不多&#xff0c;于是自己尝试创建一个简易的CRUD模块 1.各版本bug 主要尝试了1.1.2版本和vue2的版本&#xff0c;链接如下&#xff1a; v1.1.2 vue2 两个版本…