CF1491A K-th Largest Value 题解
Content
你有一个长度为 \(n\),并且仅包含 \(0/1\) 的数组 \(a\)。现在对这个序列做以下两种操作之一共 \(q\) 次:
- \(1\) \(x\):将 \(a_x\) 修改为 \(1-a_x\)。
- \(2\) \(k\):查询这个数组的第 \(k\) 大数。
对于每次操作 \(2\),输出答案。
数据范围:\(1\leqslant n,q\leqslant 10^5\)。
Solution
乍一看需要什么数据结构,其实不需要。
由于这个数组仅有 \(0\) 或 \(1\)。因此我们很容易想到查询第 \(k\) 大数的判断:如果当前数组里面 \(1\) 的个数 \(\geqslant k\),那么这个序列的第 \(k\) 大数是 \(1\),否则就是 \(0\)。理由很容易想清楚,这里不再多解释。至于修改操作直接模拟就好了。
同时,我们开两个计数器用来统计当前数组的 \(0\) 和 \(1\) 的个数,初始化为输入的数组中 \(0\) 和 \(1\) 的个数,随每次修改操作改变。具体来说,如果要修改的是 \(1\),那么 \(1\) 的个数减 \(1\),\(0\) 的个数加 \(1\);修改的是 \(0\),就把 \(0\) 的个数减 \(1\),\(1\) 的个数加 \(1\)。总之就是一句话:修改谁,就把谁的个数减 \(1\),另外一个数的个数加 \(1\)。
若还有不懂的地方可以参考一下下面给出的代码实现。
Code
int n, m, a[100007], num0, num1;
int main() {
//freopen(".in", "r", stdin);
//freopen(".out", "w", stdout);
n = Rint, m = Rint;
F(i, 1, n) {
a[i] = Rint;
num0 += (a[i] == 0), num1 += (a[i] == 1);
}
while(m--) {
int op = Rint, x = Rint;
if(op == 1) {
if(a[x]) num1--, num0++;
else num0--, num1++;
a[x] = 1 - a[x];
} else printf("%d\n", x <= num1 ? 1 : 0);
}
return 0;
}
CF1491A K-th Largest Value 题解的更多相关文章
- HDU 4417 Super Mario(主席树 区间不超过k的个数)题解
题意:问区间内不超过k的个数 思路:显然主席树,把所有的值离散化一下,然后主席树求一下小于等于k有几个就行.注意,他给你的k不一定包含在数组里,所以问题中的询问一起离散化. 代码: #include& ...
- 算法训练 区间k大数查询(题解)
资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包 ...
- 试题 算法训练 区间k大数查询 java题解
资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正 ...
- UVa 11988 - Broken Keyboard (a.k.a. Beiju Text) 题解
刘汝佳的题目,悲剧文本 -_-||| 这里使用vector<string>容器倒置记录数据,然后从后面输出就能够了. 难度就是不知道这种文档究竟哪里是開始输出,故此使用动态管理内存的容器比 ...
- 【luogu P1993 小K的农场】 题解
题目链接:https://www.luogu.org/problemnew/show/P1993 1.差分约束: 对于a - b <= c 有一条 b-->a 权值为c 对于a - b & ...
- 题解——UVA11997 K Smallest Sums
题面 背景 输入 输出 翻译(渣自翻) 给定K个包含K个数字的表,要求将其能产生的\( k^{k} \)个值中最小的K个输出出来 题解 k路归并问题的经典问题 可以转化为二路归并问题求解 考虑A[], ...
- 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树
题目传送门 题解 orz vfk的题解 3065: 带插入区间K小值 系列题解 一 二 三 四 惨 一开始用了一种空间常数很大的方法,每次重构的时候merge两颗线段树,然后无限RE(其实是MLE). ...
- LeetCode Kth Largest Element in an Array
原题链接在这里:https://leetcode.com/problems/kth-largest-element-in-an-array/ 题目: Find the kth largest elem ...
- 【leetcode】215. Kth Largest Element in an Array
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...
随机推荐
- vue 3 学习笔记 (八)——provide 和 inject 用法及原理
在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传 ...
- Java设计模式之(十)——组合模式
1.什么是组合模式? Compose objects into tree structures to represent part-whole hierarchies.Composite lets c ...
- 洛谷 P5391 - [Cnoi2019]青染之心
洛谷题面传送门 介绍一种假做法,期望复杂度应该比较优秀,但可以卡掉( 首先这个问题显然严格强于只有添加元素的情况对吧,而只有添加元素的情况就是一个普通的背包,而只有插入操作的版本复杂度就已经达到了 \ ...
- 洛谷 P4183 - [USACO18JAN]Cow at Large P(点分治)
洛谷题面传送门 点分治 hot tea. 首先考虑什么样的点能够对以 \(u\) 为根的答案产生 \(1\) 的贡献.我们考虑以 \(u\) 为根对整棵树进行一遍 DFS.那么对于一个点 \(v\), ...
- wget 命令用法
wget 命令用法 1. 用法/命令格式 wget [OPTION]... [URL]... wget [参数列表] [目标软件.网页的网址] 长选项所必须的参数在使用短选项时也是必须的 2. 常用参 ...
- plyr包使用
#-------------------------------- # plyr包使用# 建议直接保存为R文件到Rstudio中运行 #-------------------------------- ...
- go搭建beego框架 go安装bee报错 github.com/derekparker/delve@v1.4.0: parsing go.mod:
go搭建beego框架 go安装bee报错 go使用beego框架的时候,需要安装bee,安装的时候遇到一些坑报错,这里跟大家分享一下,有助于快速安装bee,搭建好beego环境 1. 首先切换到go ...
- Linux三剑客之老三grep
说明: Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.工作中我们常常用它来过滤出我们想要的数据. 格式: grep [OPTIONS] 基本参 ...
- php导出pdf,dompdf中文字体乱码解决办法(特别是代码迁移引起的乱码)
dompdf\lib\fonts\dompdf_font_family_cache.php记住这个文件里面存放的是字体生成的缓存,迁移时如果覆盖了这个文件会导致乱码而且很难找到出错的地方,相信我... ...
- 重学Git(一)
一.最最最基础操作 # 初始化仓库 git init # 添加文件到暂存区 git add readme.md # 提交 git commit -m 'wrote a readme file' 二.简 ...