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 题解的更多相关文章

  1. HDU 4417 Super Mario(主席树 区间不超过k的个数)题解

    题意:问区间内不超过k的个数 思路:显然主席树,把所有的值离散化一下,然后主席树求一下小于等于k有几个就行.注意,他给你的k不一定包含在数组里,所以问题中的询问一起离散化. 代码: #include& ...

  2. 算法训练 区间k大数查询(题解)

    资源限制 时间限制:1.0s   内存限制:256.0MB   问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个.   输入格式 第一行包含一个数n,表示序列长度. 第二行包 ...

  3. 试题 算法训练 区间k大数查询 java题解

    资源限制 时间限制:1.0s   内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正 ...

  4. UVa 11988 - Broken Keyboard (a.k.a. Beiju Text) 题解

    刘汝佳的题目,悲剧文本 -_-||| 这里使用vector<string>容器倒置记录数据,然后从后面输出就能够了. 难度就是不知道这种文档究竟哪里是開始输出,故此使用动态管理内存的容器比 ...

  5. 【luogu P1993 小K的农场】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1993 1.差分约束: 对于a - b <= c 有一条 b-->a 权值为c 对于a - b & ...

  6. 题解——UVA11997 K Smallest Sums

    题面 背景 输入 输出 翻译(渣自翻) 给定K个包含K个数字的表,要求将其能产生的\( k^{k} \)个值中最小的K个输出出来 题解 k路归并问题的经典问题 可以转化为二路归并问题求解 考虑A[], ...

  7. 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树

    题目传送门 题解 orz vfk的题解 3065: 带插入区间K小值 系列题解 一 二 三 四 惨 一开始用了一种空间常数很大的方法,每次重构的时候merge两颗线段树,然后无限RE(其实是MLE). ...

  8. LeetCode Kth Largest Element in an Array

    原题链接在这里:https://leetcode.com/problems/kth-largest-element-in-an-array/ 题目: Find the kth largest elem ...

  9. 【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 ...

随机推荐

  1. .net打独立运行环境遇到无法trim遇到的bug

    背景介绍 工作中我用到kotlin写代码,在orm上ktorm是一款非常优秀的操作db的框架,我喜欢用它所以我写了一个插件能够增加我的工作效率,这款idea插件的主体逻辑是.net开发的(没错是跨平台 ...

  2. Atcoder Grand Contest 006 D - Median Pyramid Hard(二分+思维)

    Atcoder 题面传送门 & 洛谷题面传送门 u1s1 Atcoder 不少思维题是真的想不出来,尽管在 Atcoder 上难度并不高 二分答案(这我倒是想到了),检验最上面一层的数是否 \ ...

  3. 【豆科基因组】利马豆/洋扁豆Lima bean(Phaseolus lunatus L.)基因组2021NC

    目录 一.来源 二.结果 扁豆的染色体水平高质量组装 扁豆相关农艺性状的QTL定位 直系/旁系同源的演化和物种形成事件 与农艺性状相关基因的直系同源物 群体结构分析揭示扁豆遗传簇 豆荚发育过程中的基因 ...

  4. 如何从vcf文件中批量提取一系列基因的SNP位点?

    目录 需求 示例文件 代码实现 补充说明 需求 客户的一个简单需求: 我有一批功能基因位点,想从重测序的群体材料中找到这些位点,如何批量快速获得? 示例文件 gene.txt test.vcf 代码实 ...

  5. 50. Plus One-Leetcode

    Plus One My Submissions QuestionEditorial Solution Total Accepted: 98403 Total Submissions: 292594 D ...

  6. CMakeLists.txt添加多个源代码

    coos2d-x 3.17.2 C++工程,安卓编译使用CMake,按照模板给的写法,只能一个一个源文件添加:如果需要添加大量的C++源代码,这种方式肯定不可取:原来的写法: 1 list(APPEN ...

  7. Qemu/kvm虚拟化源码解析学习视频资料

    地址链接:tao宝搜索:Linux云计算KVM Qemu虚拟化视频源码讲解+实践​https://item.taobao.com/item.htm?ft=t&id=646300730262 L ...

  8. hadoop运行jar包报错

    执行命令:[root@hadoop102 mapreduce]# hadoop jar mapreduce2_maven.jar Filter 错误信息:Exception in thread &qu ...

  9. 1005.K次取反后最大化的数组和

    1005.K次取反后最大化的数组和 目录 1005.K次取反后最大化的数组和 题目 题解 排序+维护最小值min 题目 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 ...

  10. HDFS04 HDFS的读写流程

    HDFS的读写流程(面试重点) 目录 HDFS的读写流程(面试重点) HDFS写数据流程 网络拓扑-节点距离计算 机架感知(副本存储节点的选择) HDFS的读数据流程 HDFS写数据流程 客服端把D: ...