首页 > 其他分享 >[ARC149E] Sliding Window Sort

[ARC149E] Sliding Window Sort

时间:2023-10-12 11:35:59浏览次数:32  
标签:Sort tmp int pos ++ Window ans 1ll Sliding

[ARC149E] Sliding Window Sort

考虑到 \(k \le 10^9\) 太大了,我们先模拟一下看看能不能化成 \(k\) 比较小的情况。注意到,我们每次只会在 \(i\) 留下一个数,相当于我们手上一定有前缀前 \(m - 1\) 大的数。这样当我们操作完 \([n - m, n - 1]\) 时,手上就会有 \([n - m + 1, n]\),然后后面的操作就确定为了每次把 \(a_{k + m - 1}\) 移到 \(k\) 的位置上。这样我们可以先判掉不合法情况,然后把 \([n - m + 1, n]\) 这些数排除掉,求出最终整个序列发生了怎样的变化,这样就转化为了 \(k = n - m + 1\) 的情形。

然后发现若 \(k < n - m + 1\),那么后缀就是确定的,对答案无影响,直接令 \(n = k + m - 1\) 即可。现在就固定有 \(k = n - m + 1\) 了。

现在只用考虑一个序列上的问题,考虑 \(b_i\) 合法的充要条件,相当于 \(a_{1,2,3\cdots i + m - 1}\) 中排除掉 \(b_{1,2,3\cdots i-1}\) 后剩下的数中有一个 \(b_i\) 并且全部 \(\ge b_i\)。自然想到若 \(b_{i - 1} > b_i\) 则 \(b_i\) 只能填在 \(a_{i + m - 1}\) 这个位置上,因为前面的位置都 \(\ge b_{i - 1} > b_i\)。进一步当且仅当 \(b_i\) 为前缀 \(\max\) 时有 \(m\) 种方案,其余情况都只能填在 \(a_{i + m - 1}\) 上,这个可以利用上面的性质按照距离前一个前缀 \(\max\)归纳证明。

最后 \([n - m + 1, n]\) 这些数还有 \((m - 1)!\) 种方案。复杂度 \(O(n)\)。

const int N = 3e5 + 10;
const int P = 998244353;
int n, m, k;
int b[N];

int main() {
  read(n, m, k);
  for(int i = 0; i < n; ++i)
    read(b[i]);
  if(n > m + k - 1) n = m + k - 1;
  vector<int> tmp(b, b + n);
  sort(tmp.begin(), tmp.end());
  for(int i = 0; i < n; ++i)
    b[i] = lower_bound(tmp.begin(), tmp.end(), b[i]) - tmp.begin() + 1;
  int ans = m;
  for(int i = 1, j = (m + k - 2) % n; i < m; ++i, j = (j - 1 + n) % n)
    if(b[j] != n - i + 1) ans = 0;
  k -= n - m + 1;
  int pos = (n - 1ll * (k + n - m) / (n - m + 1) * (m - 1) % n) % n;
  int mx = b[pos];
  for(int i = 1, j = pos; i <= n - (m - 1); ++i, j = (j + 1) % n) {
    while(b[j] > n - m + 1) j = (j + 1) % n;
    if(b[j] > mx) mx = b[j], ans = 1ll * ans * m % P;
  }
  for(int i = 1; i < m; ++i) ans = 1ll * ans * i % P;
  printf("%d\n",ans);
}

标签:Sort,tmp,int,pos,++,Window,ans,1ll,Sliding
From: https://www.cnblogs.com/DCH233/p/17759101.html

相关文章

  • LabWindows/CVI Scan( )函数
    背景介绍Scan()可以将字符串按照用户formatString格式说明分解成多个组件。最多可以分解29个组件。Scan()很强大且复杂,使用起来容易出错,但它却被频繁使用。Scan()函数函数头文件:#include<formatio.h>函数原型:intScan(void*Source,charFormat_String[],...);将字符......
  • 在Windows下配置Clang编译器
    PreferencesLinux&macOS平台LLVM相关工具链下载2019年,在Windows下配置Clang编译器VisualStudio2022中使用Clangclion使用clang编译Clion2020.3:如何设置Clang编译器这篇文章主要介绍如何在Windows使用Clang编译器来编译C/C++程序(在命令行下,clang是C编译器,编译C++......
  • python pyautogui AttributeError: module 'pyscreeze' has no attribute 'locateOnW
    目录pythonpyautoguiAttributeError:module'pyscreeze'hasnoattribute'locateOnWindow'pythonpyautoguiAttributeError:module'pyscreeze'hasnoattribute'locateOnWindow'安装好pyautogui后测试脚本报错如标题这个报错百度查询是版本过高导致......
  • dhcp服务器迁移---从windows server 2003到windows server 2012
    近期,工作中接触到dhcp服务器的迁移。搜索了网上的一些解决方案,很详细。以下主要是碰到的一些问题以及解决方案。由于2003的版本太老,导出来的配置文件为古老的mdb格式,而导入到2012中的格式需要为txt。 在2003中,尝试用命令(网上可找到)导出来txt格式,但是公司那台服务器实现不了......
  • Discuz! X3.5 从windows到windows的迁移
    适用场景Discuz!X3.5windows到windows的迁移,本例2016至2019准备安装IIS,安装应用程序开发,安装cgiisapi扩展isapi筛选器把之前的PHP文件夹拷到同目录下,避免版本问题和重新配置IIS,服务器节点,处理程序映射,添加模块映射 *.php FastCgiModule C:\PHP\php-cgi.exe未完待......
  • windows怎么查看端口占用情况
    Windows是广泛使用的操作系统之一,许多应用程序和服务都可能占用计算机上的端口。当端口被占用时,可能会导致其他程序无法正常工作或导致网络连接问题。因此,了解如何查看Windows上的端口占用情况非常重要。本文将介绍几种常用的方法,以帮助您查看和管理端口占用情况。Error:list......
  • PE盘安装Windows Server 2022系统
    前言我需要一台稳定且能够全天候运行的机器时,电脑原本预装的Windows10系统,虽然在日常使用场景下表现良好,但大家都知道Windows系统的自动更新太频繁了,而且无法关闭。为了解决这个问题,我决定重新安装WindowsServer系统。这里我选择了WindowsServer2022版本。WindowsSer......
  • windows 安装pyspark环境及pycharm配置
    1.安装JDKhttps://www.cnblogs.com/whiteY/p/13332708.html2.安装hadoop2.7下载hadoop2.7.1安装包链接:https://pan.baidu.com/s/1saGhaKbcvwrE4P3F5_UhZQ提取码:1234解压到指定位置3.下载winutils链接:https://pan.baidu.com/s/1L1iRZQcmaw9voQEJzO4bmA提取码:1234......
  • YOLOv8+DeepSORT多目标车辆跟踪(车辆检测+跟踪+车辆计数)(内附免费资源+部署讲解)
    https://blog.csdn.net/Little_Carter/article/details/133610076目录一、前言二、开发环境(前提条件)三、环境搭建教程3.1、创建虚拟环境3.2、选择虚拟环境并安装所需要的包3.3、运行代码步骤3.3.1、克隆git储存库3.3.2、转到克隆库的文件夹下3.3.3、安装依赖项3.3.4......
  • Window 11中修改微软edge浏览器alt+tab切换标签而无法切换系统窗口的问题
    最近刚转手使用Edge浏览器的时候发现不能用alt+tab切换别的应用上,在浏览器设置上找了半天还是没有,最后离谱的在系统设置里面多任务窗口找到了这个设置。打开设置找到多任务处理,点开后里面第二项修改为不显示选项卡即可。......