首页 > 其他分享 >P1631 序列合并

P1631 序列合并

时间:2023-09-24 17:36:02浏览次数:36  
标签:状态 int 合并 P1631 MaxN 序列 include

P1631 序列合并

思路

思路一

题目要求的是二维的,太麻烦,所以我们可以将其用一维划分,将每一组都变成线性的,那线性的就很好求了,直接排序然后从前往后算即可,那么就可以将这 \(n\) 组合并,但如果是整个都算出来再合并就会是 \(O(n^2)\) 的,所以可以只记录当前的,那么对于当前的最小的状态,下一个状态要么是其它组的最小状态,要么是当前组的下一个状态,所以只要记录下一个状态即可,其它组的最小状态已经被加进去了。

code

#include <iostream>
#include <queue>
#include <algorithm>

using namespace std;

const int MaxN = 100010;

struct S {
  int i, j, t;

  bool operator<(const S &j) const {
    return t > j.t;
  }
};

int a[MaxN], b[MaxN], n;
priority_queue<S> q;

int main() {
  ios::sync_with_stdio(0), cin.tie(0);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> b[i];
  }  
  sort(a + 1, a + n + 1);
  sort(b + 1, b + n + 1);
  for (int i = 1; i <= n; i++) {
    q.push({1, i, a[1] + b[i]});
  }
  for (int i = 1; i <= n; i++) {
    S u = q.top();
    q.pop();
    cout << u.t << " ";
    q.push({u.i + 1, u.j, a[u.i + 1] + b[u.j]});
  } 
  return 0;
}

时空复杂度

时间:排序:\(O(nlogn)\) 枚举:\(O(n)\) 堆:\(O(logn)\)
空间:\(O(n)\)

思路2

如果是两个已经排好序的数列,那么当前最小值肯定是两个头,那下一个最小值呢?可以是之前就已经加入的值,也可以是两个数列中删掉一个头的情况,处理一下即可。

时空复杂度

时间:\(O(nlogn)\)
空间:\(O(n)\)

标签:状态,int,合并,P1631,MaxN,序列,include
From: https://www.cnblogs.com/ybtarr/p/17726274.html

相关文章

  • ClickHouse数据表合并与性能优化方法探讨与案例研究分享
    前言ClickHouse是一款高性能的列式数据库,其在海量数据处理方面具有很强的优势。但是,在实际应用中,我们经常需要对多个数据表进行合并,以便更好地进行数据分析和挖掘。本文将探讨ClickHouse的数据表合并与性能优化方法,并结合实际案例进行分享。数据表合并在ClickHouse中,数据表合并......
  • Leetcode刷题21.合并两个有序链表
    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0] 提示:两个链表的节点数目......
  • 序列模块pickle模块hashlib模块
    序列模块pickle模块hashlib模块序列化模块什么是序列化?什么是序列? 序列就是字符串序列化是把其他数据类型转为json字符串的过程什么是反序列化? 把json字符串转为其他数据类型的过程就是反序列化"""json字符串json对象"""在Python中把其他数据类型转为json需......
  • 使用bwa进行序列比对
     001、bwamem-t4-k32-M-R"@RG\tID:name\tSM:name\tPL:illumina\tLB:name\tPU:name"reference.fnasm.clean.1.fastq.gzsm.clean.2.fastq.gz|samtoolsview-Sb->sm.bam mem:mem比对算法-t:指定线程数-k:(这个参数可以不设置)最小的种子长度(minimumseedlen......
  • python的pandas库:合并数据
    在Pandas中,如果你有两个数据框(DataFrames),且它们的列数和列名都相同,你可以使用concat或merge函数将它们合并。以下是具体步骤:首先,导入Pandas库:importpandasaspd创建两个列数和列名都相同的数据框:df1=pd.DataFrame({'A':['A0','A1','A2','A3'],'B':[�......
  • Apache Log4j Server CVE-2017-5645 反序列化命令执行漏洞
    漏洞描述攻击者可以通过发送一个特别制作的2进制payload,在组件将字节反序列化为对象时,触发并执行构造的payload代码。该漏洞主要是由于在处理ObjectInputStream时,接收函数对于不可靠来源的input没有过滤。可以通过给TcpSocketServer和UdpSocketServer添加可配置的过滤功能以及一......
  • 表格动态合并,序号连续
    效果:<el-table:data="tableData"style="width:100%"v-loading="tableDataLoading":header-cell-style="{background:'#FAFAFA'}":span-method="objectSpanMethod"......
  • 如何将 Transformer 应用于时间序列模型
    在机器学习的广阔前景中,transformers就像建筑奇迹一样高高耸立,以其复杂的设计和捕获复杂关系的能力重塑了我们处理和理解大量数据的方式。自2017年创建第一个Transformer以来,Transformer类型呈爆炸式增长,其中包括ChatGPT和DALL-E等强大的生成式AI模型。虽然transform......
  • Java 序列化与反序列化的疑问
    关于序列化和反序列化的疑问为什么需要序列化和反序列化?因为计算机底层存储和传输都是二进制,所以需要将对象转化成字节数组。那么问题来了,只需要转成字节数组就行了,那为啥还要弄这么多东西?搞这么复杂?因为直接转生成的字节数组是不规则的,所以我们不能通过这样的字节数组把原......
  • ClickHouse(15)ClickHouse合并树MergeTree家族表引擎之GraphiteMergeTree详细解析
    GraphiteMergeTree该引擎用来对Graphite数据(图数据)进行瘦身及汇总。对于想使用ClickHouse来存储Graphite数据的开发者来说可能有用。如果不需要对Graphite数据做汇总,那么可以使用任意的ClickHouse表引擎;但若需要,那就采用GraphiteMergeTree引擎。它能减少存储空间,同时能提高Grap......