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. vue 3 学习笔记 (八)——provide 和 inject 用法及原理

    在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传 ...

  2. Java设计模式之(十)——组合模式

    1.什么是组合模式? Compose objects into tree structures to represent part-whole hierarchies.Composite lets c ...

  3. 洛谷 P5391 - [Cnoi2019]青染之心

    洛谷题面传送门 介绍一种假做法,期望复杂度应该比较优秀,但可以卡掉( 首先这个问题显然严格强于只有添加元素的情况对吧,而只有添加元素的情况就是一个普通的背包,而只有插入操作的版本复杂度就已经达到了 \ ...

  4. 洛谷 P4183 - [USACO18JAN]Cow at Large P(点分治)

    洛谷题面传送门 点分治 hot tea. 首先考虑什么样的点能够对以 \(u\) 为根的答案产生 \(1\) 的贡献.我们考虑以 \(u\) 为根对整棵树进行一遍 DFS.那么对于一个点 \(v\), ...

  5. wget 命令用法

    wget 命令用法 1. 用法/命令格式 wget [OPTION]... [URL]... wget [参数列表] [目标软件.网页的网址] 长选项所必须的参数在使用短选项时也是必须的 2. 常用参 ...

  6. plyr包使用

    #-------------------------------- # plyr包使用# 建议直接保存为R文件到Rstudio中运行 #-------------------------------- ...

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

  8. Linux三剑客之老三grep

    说明: Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.工作中我们常常用它来过滤出我们想要的数据. 格式: grep [OPTIONS] 基本参 ...

  9. php导出pdf,dompdf中文字体乱码解决办法(特别是代码迁移引起的乱码)

    dompdf\lib\fonts\dompdf_font_family_cache.php记住这个文件里面存放的是字体生成的缓存,迁移时如果覆盖了这个文件会导致乱码而且很难找到出错的地方,相信我... ...

  10. 重学Git(一)

    一.最最最基础操作 # 初始化仓库 git init # 添加文件到暂存区 git add readme.md # 提交 git commit -m 'wrote a readme file' 二.简 ...