首页 > 其他分享 >2023.6.16 每日一题

2023.6.16 每日一题

时间:2023-06-16 16:33:59浏览次数:60  
标签:fir 16 int 每日 lst 2023.6 数组 include dp

原题链接

B - Technocup 2020 - Elimination Round 1 - D

B. Sequence Sorting - 2000

题目大意

给定一个数组,定义一个操作:选定一个数,将所有值等于这个数的数移动到数组的一端(数组头或者数组尾)。问将数组变成非递减序列最少需要多少操作次数。

解题思路

对于每一种数,我们记录他们第一次出现的位置和最后一次出现的位置来界定他的跨度。

我们使用一个dp数组去找对于每一种元素,他最后一次出现的位置比下一个的第一次出现还要小的情况是否得到满足。

一旦存在满足如上条件的序列,那么这段序列涉及到的元素就不需要移动,求出这样的序列长度的最大值拿总数减去即可。

AC Code

#include <iostream>
#include <algorithm>
#include <cstring>
#define endl '\n'
#define ios ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;
typedef long long LL;

const int N = 3e5 + 10;
const int MOD = 1e9 + 7;

LL a[N], fir[N], lst[N];
LL dp[N];

pair<int, pair<int, int>> p[N];

void solve() {
    int n, cnt = 0;
    cin >> n;
    fill(fir + 1, fir + n + 1, 0);
    fill(lst + 1, lst + n + 1, 0);
    fill(dp, dp + n + 1, 0);
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        if (!fir[a[i]]) {
            cnt++;
            fir[a[i]] = i;
        }
        lst[a[i]] = i;
    }
    for (int i = 1, j = 0; i <= n; ++i) {
        if (fir[a[i]] == i) {
            p[++j] = {a[i], {fir[a[i]], lst[a[i]]}};
        }
    }
    sort(p + 1, p + cnt + 1);
    dp[1] = 1;
    for (int i = 2; i <= cnt; ++i) {
        dp[i] = (p[i - 1].second.second < p[i].second.first) ? dp[i - 1] + 1 : 1;
    }
    cout << cnt - *max_element(dp + 1, dp + cnt + 1) << endl;
}

signed main() {
    ios;
    int T = 1;
    cin >> T;
    while (T--) {
        solve();
    }
}


标签:fir,16,int,每日,lst,2023.6,数组,include,dp
From: https://www.cnblogs.com/SanCai-Newbie/p/17485920.html

相关文章

  • 【寒假每日一题】AcWing 3400. 统计次数(补)
     目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解 一、题目1、原题链接3400.统计次数-AcWing题库2、题目描述给定两个正整数 n 和 k,求从 1 到 n 这 n 个正整数的十进制表示中 k 出现的次数。输入格式共一行,包含两个整数 n ......
  • 联想小新pro16 ubuntu18.04双系统、显卡驱动配置
    双系统安装注意了,所有的步骤都要按照这个链接来,跳过一步可能就出错了Ubuntu18.04安装教程每一步都有、多图卸载ubuntu方法一旦出错,先去计算机磁盘管理里面把ubuntu相关的区都给删掉,下面这个图不太清楚,主要就是上个链接中的四个区都格式化。然后,按照这个教程的第三步删除开......
  • C/C++航空客运订票管理系统[2023-06-16]
    C/C++航空客运订票管理系统[2023-06-16]用c++设计一个航空客运订票管理系统。系统功能要求如下:(1)查询航线:根据旅客提出的站名输出下列信息:航班号、飞机号、飞行日期(含详细时间段),余票量、已定票乘客的信息;(2)排序功能:根据不同属性对航线进行排序;(3)订票业务:根据客户提出的要求(航班......
  • 2023-06-16 《计算方法》- 陈丽娟 - 绪论.md
    2023-06-16《计算方法》-陈丽娟-绪论Matlab计算方法误差有效数字本章主要介绍计算方法的研究对象与特点,介绍误差的基本概念,并且提出在数值计算中应当普遍遵循的若干原则。最后附上习题答案。一、误差与有效数字误差可以分为:模型误差观测误差截断误差即用有限计算过......
  • 系统架构设计师笔记第16期:数据库基本概念
    数据库技术的发展数据库技术在过去几十年中经历了显著的发展和演变。层次数据库和网状数据库:20世纪60年代和70年代初,层次数据库和网状数据库是主流的数据库模型。层次数据库使用树状结构组织数据,而网状数据库使用复杂的网络结构。这些数据库模型适用于特定的数据组织和查询需求,但缺......
  • C/C++四则变量表达式计算[2023-06-16]
    C/C++四则变量表达式计算[2023-06-16]课程设计题一:四则变量表达式计算设计目的:1.掌握结构体的用法以及采用结构体定义线性表2.学会利用线性表保存变量名及其代入值3.理解堆栈在四则运算中的应用价值4.自学第五章字符串的基本操作并用于子串分割,实现更复杂的四则运算设计内......
  • C++《面向对象程序设计课程设计》[2023-06-16]
    C++《面向对象程序设计课程设计》[2023-06-16]《面向对象程序设计课程设计》任务书时间:班级:一分组和评分周一上午8:30作业布置周四5/6节开始,周五12点前检查,提问并打分;每人完成自己的课程设计报告,不能复制其他同学的报告内容,报告中主要说明自己在设计中所作的工作。......
  • 6/16 闲话
    最近搞了很多式子,合起来写一个东西推歌:シェーマ-Chinozo/v_flower歌词笑顔に花咲く君の目が夜の街にfadeoutAhfadeoutahfadeout見送る先には死者のcity分からないな世界血を流す覚悟を絡まっていた僕は最低だIdon'tsayNoをNoNoを自身のためそ......
  • 2023.6.15 08.数据库安全管理
    08.数据库安全管理⽤户账户管理访问权限系统访问权限回收在讨论安全时,我们需要考虑整个服务器主机安全(⽽不仅仅是MySQL服务)需要抵御攻击,窃听,扫描,破解等。MySQL对所有连接数据库⽤户进⾏了ACL访问控制,减少服务器被内部不规范操作导致故障。MySQL还⽀持客户端和......
  • 2023.6.15每日一题
    原题链接:A-CodeforcesRound666(Div.1)-CB-EducationalCodeforcesRound82(RatedforDiv.2)-CA.MonsterInvaders-2300题目大意在一款RPG当中,有两种类型的怪物,普通怪物血量为\(1\),boss的血量为\(2\)。我们有三种攻击手段:手枪,对一个怪物造成1点伤害,......