[AGC017C] Snuke and Spells

news/2024/10/5 14:14:30

题意

给定 \(n\) 个球,每个球上有一个数字 \(a_i\)

每当魔法少女施展魔法时,会将写着当前球的数量的球全部消除。

\(q\) 次修改球的值,你需要在基础上修改最小的次数使得这 \(n\) 个球可以被魔法少女消除,求出你修改的最小次数。

\(n \le 2 \times 10 ^ 5\)

Sol

神题!

由于修改至多一个球,因此答案至多变化 \(1\)

没用。

考虑按照 \(a_i\) 的大小排序,将每类球合并,设 \(i\) 类球的个数为 \(a'_i\),可以得到:\(i = \sum_{j < i} a'_j\)

也就是说,第 \(i\) 类球恰好占满了上一个有球的位置 \(j\)\(i\) 的空位,即 \([j + 1, i]\)

注意到这 \(n\) 类球恰好有 \(n\) 个,恰好占满了 \(n\) 个位置,因此显然操作次数的下界就为空位数。

做完了,开个桶记录一下每个下标球的个数即可。

Code

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <array>
using namespace std;
#ifdef ONLINE_JUDGE#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++)
char buf[1 << 23], *p1 = buf, *p2 = buf, ubuf[1 << 23], *u = ubuf;#endif
int read() {int p = 0, flg = 1;char c = getchar();while (c < '0' || c > '9') {if (c == '-') flg = -1;c = getchar();}while (c >= '0' && c <= '9') {p = p * 10 + c - '0';c = getchar();}return p * flg;
}
void write(int x) {if (x < 0) {x = -x;putchar('-');}if (x > 9) {write(x / 10);}putchar(x % 10 + '0');
}
bool _stmer;const int N = 2e5 + 5;array <int, N> isl, idx;
array <int, N> s;bool _edmer;
int main() {cerr << (&_stmer - &_edmer) / 1024.0 / 1024.0 << "MB\n";int n = read(), q = read(), ans = n;for (int i = 1; i <= n; i++) {s[i] = read(), idx[s[i]]++;if (s[i] - idx[s[i]] >= 0) {if (!isl[s[i] - idx[s[i]]]) ans--;isl[s[i] - idx[s[i]]]++;}}while (q--) {int x = read(), y = read();if (s[x] - idx[s[x]] >= 0) {isl[s[x] - idx[s[x]]]--;if (!isl[s[x] - idx[s[x]]]) ans++;}idx[s[x]]--;s[x] = y;idx[s[x]]++;if (s[x] - idx[s[x]] >= 0) {if (!isl[s[x] - idx[s[x]]]) ans--;isl[s[x] - idx[s[x]]]++;}write(ans), puts("");}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/67983.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

MAC 安装 Homebrew (使用国内镜像源)

Homebrew 官方地址 https://brew.sh/zh-cn/ 官方地址使用github的源,国内访问速度很慢,所以我们需要使用国内的源。 自动安装 Homebrew 首先可以尝试自动安装方法,直接一行命令就行: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homeb…

GraphQL、sequelize-typescript 、Apollo Server 4 实例

新建项目文件夹$ mkdir demo $ cd demo初始化TypeScript配置$ npx tsc --init安装 Sequelize Sequelize-cli$ npm install --save-dev @types/node @types/validator $ npm install sequelize reflect-metadata sequelize-typescript $ npm install --save-dev ts-node @types/…

@ImportResource用法

用法 @ImportResource 注解用于导入 Spring的配置文件,让某个配置文件中的bean生效; SpringBoot里没有 Spring的配置文件,自己可以手动编写配置文件,但Spring Boot不能自动识别,此时需要在配置类中引入编写的配置文件 注意:这个配置文件生效需要放在 配置类上!! 举个例…

ROS基础入门——实操教程3C

合集 - Ubuntu强化学习合集(3)1.命令行gcc -v和g++ -v输出版本不一致09-272.crypt.h:No such file or directory 报错处理09-283.ROS基础入门——实操教程10-04收起 ROS基础入门——实操教程前言 本教程实操为主,少说书。可供参考的文档中详细的记录了ROS的实操和理论,只是过…

Linux_权限理解(详细PLUS)Gu

1.用户 Linux下有两种用户:超级用户(root)和普通用户; 超级用户:可以再linux系统下做任何事情,不受限制 普通用户:在linux下做有限的事情 超级用户的命令提示符是"#",普通用户的命令提示符是"$"超级用户:普通用户:2.用户切换 用户间切换: su + 用…

织梦php数据库配置文件

织梦CMS(DedeCMS)的数据库配置文件通常位于安装目录下的 include 文件夹中,具体文件名为 config.inc.php。这个文件包含了数据库连接的所有必要信息。下面详细说明如何配置这个文件。 步骤 1: 备份现有配置文件 在修改任何配置文件之前,最好先备份现有的配置文件,以防万一…

连接到数据库,你可以查看织梦CMS的相关表结构和数据

一旦连接到数据库,你可以查看织梦CMS的相关表结构和数据。 使用phpMyAdmin查看数据库表在phpMyAdmin中,选择你的织梦CMS数据库。 点击左侧的数据库名称,可以看到所有的表列表。 点击每个表,可以查看表结构和数据。使用MySQL命令行查看数据库表进入数据库后,运行以下命令查…

找到织梦CMS的数据库配置文件,以便了解数据库的具体连接信息

首先,找到织梦CMS的数据库配置文件,以便了解数据库的具体连接信息。 数据库配置文件路径织梦CMS安装目录假设织梦CMS安装在 /var/www/html 目录下。 数据库配置文件位于 include/config.inc.php。打开配置文件使用FTP工具或服务器上的文件管理器,打开织梦CMS安装目录下的 in…