首页 > 其他分享 >GYM 105125 C

GYM 105125 C

时间:2024-09-17 21:47:34浏览次数:11  
标签:begin 105125 ve int GYM 数组 字典 NM

题目描述

给定 \(NM\) 个数 \(A_1,A_2,\dots,A_{NM}\),你要将这些数分成 \(N\) 个数组,每个数组 \(M\) 个数。接着你要将这些数组按字典序排序。

对于排序后每个数组求出可能的字典序最小情况。

思路

我们从字典序的比较上来考虑,并把 \(A\) 排序。

首先考虑当前数组 \(i\) 的第一位。在 \(i\) 之前,还有 \(i-1\) 个数组的字典序需要小于它,因此第一个数一定为 \(A_i\)。

接着考虑第 \(2\) 位,如果某个数组第一位就小于 \(i\) 了,那么后面的部分就不用管了。假设有 \(x\) 个数组第一位与 \(i\) 相同,也就是在 \([1,i]\) 中有 \(x\) 个数 \(=A_i\),那么就有 \(x-1\) 个数组目前还 \(=\) 数组 \(i\),那么 \([i+1,i+x-1]\) 都要分配给它们,所以第二位为 \(A_{i+x}\)。

后面的部分同理。

空间复杂度 \(O(NM)\),时间复杂度 \(O(NM\log (NM))\)。

代码

#include<bits/stdc++.h>
using namespace std;

const int MAXN = 1000001;

int n, m, a[MAXN];
vector<int> ve[MAXN];

int query(int l, int r, int x) {
  int L = lower_bound(ve[x].begin(), ve[x].end(), l) - ve[x].begin();
  int R = upper_bound(ve[x].begin(), ve[x].end(), r) - ve[x].begin() - 1;
  return R - L + 1;
}

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> m;
  for(int i = 1; i <= n * m; ++i) {
    cin >> a[i];
  }
  sort(a + 1, a + n * m + 1);
  for(int i = 1; i <= n * m; ++i) {
    ve[a[i]].push_back(i);
  }
  for(int i = 1; i <= n; ++i) {
    int cnt = i, pos = i;
    for(int j = 1; j <= m; ++j) {
      cout << a[pos] << " \n"[j == m];
      cnt = min(cnt, query(pos - cnt + 1, pos, a[pos]));
      pos += cnt;
    }
  }
  return 0;
}

标签:begin,105125,ve,int,GYM,数组,字典,NM
From: https://www.cnblogs.com/yaosicheng124/p/18417586

相关文章

  • GYM 103389 C
    题目描述有\(N\)个景点,第\(i\)个属于公司\(c_i\)。当你第一次路过一个属于公司\(i\)的景点时,你会获得\(w_i\)元。在景点之间有\(m\)条单向道路连接\(u,v(u<v)\)。一开始你在景点\(1\)。求到所有景点\(1\lei\leN\)时最多能获得多少元。思路由于公司数量很少,所......
  • GYM 104114 F
    题目描述有\(N\)个参赛选手,将进行\(N-1\)场比赛,第\(i,j\)个选手进行比赛有\(P_{i,j}\)的激烈程度。每当选手\(i\)打败选手\(j\)时,\(P_{i,x}\leftarrow\max(P_{i,x},P_{j.x})\)。在这些比赛中,编号小的选手总是打败编号大的选手。求最终\(N-1\)场比赛的激烈程度之和......
  • OpenAI Gym ProcGen - Getting Action Meanings
    题意:OpenAIGymProcGen-获取动作含义问题背景:IntheOpenAIProcGengym,Iamnotgettingaway togetthemeaningsoftheactionvalues,Icanseethatthereare15actionsforthecoinrunenvironmentusing env.action_space.n.IhavetriedboththeG......
  • GYM 105264 E
    题目描述给定一个\(N\)个点的树,你要从中选出一个大小为\(k\)的子树出来,求这个子树的最小直径。思路由于此题允许\(O(N^2)\)的时间复杂度,所以考虑枚举子树的中心。接着以该中心为根向下搜出深度为\(i\)的结点数\(cnt_i\),接着枚举直径长度除\(2\)。由于这里直径可能长......
  • GYM 105264 C
    题目描述给定一个长度为\(N\)的数组\(A\),每次你可以令\(A_i\leftarrowA_i+1\)或\(A_i-1\)。求进行至多\(k\)次操作后\(A\)中最少不同元素数量。思路首先对\(A\)进行排序。令\(dp_{i,j}\)表示考虑前\(i\)个数,有\(j\)个不同的值时最多还能剩余几次操作。很......
  • OpenAI Gym custom environment: Discrete observation space with real values
    题意:OpenAIGym自定义环境:具有实数值的离散观测空间问题背景:Iwouldliketocreatecustomopenaigymenvironmentthathasdiscretestatespace,butwithfloatvalues.Tobemoreprecise,itshouldbearangeofvalueswith0.25step:10.0,10.25,10.5,10......
  • Start OpenAI gym on arbitrary initial state
    题意:“在任意初始状态下启动OpenAIGym”问题背景:AnybodyknowsanyOpenAIGymenvironmentswherewecansettheinitialstateofthegame?Forexample,IfoundtheMountainCarContinuous-v0candosuchthingsothatwecanselectatwhichpointthecarst......
  • gym创建环境、自定义gym环境
    环境:half_cheetah.pyfromosimportpathimportnumpyasnpfromgymnasiumimportutilsfromgymnasium.envs.mujocoimportMujocoEnvfromgymnasium.spacesimportBoxDEFAULT_CAMERA_CONFIG={"distance":4.0,}classMOHalfCheetahEnv(Mujoc......
  • gym序列化、EzPickle类
    EzPickle是一个用于强化学习环境的类,它重写了__getstate__和__setstate__方法,以便通过构造函数参数(*args,**kwargs)进行序列化和反序列化。这个设计允许那些无法直接用pickle库处理的对象,如数据库连接和网络套接字,也能在保存和恢复时保持其状态。"""Classforpicklingandun......
  • mujoco gymnasium 环境
    本文简要介绍gynasium中基于mujoco的环境搭建。参照gynasium.envs.mujoco。1.gynasium.Env简介在gynasium中,环境基类为gynasium.Env,其中定义了step,reset,render,close等方法以及action_space,observation_space,reward_range,spec,metadata,np_random......