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;
}

最新文章

  1. BZOJ 3524: [Poi2014]Couriers [主席树]
  2. eclipse下的emacs风格快捷键
  3. Thread safety
  4. 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》
  5. 阻止Infinitescroll.js无限滚动加载页面解决方法
  6. execl执行解释器文件以及shell命令
  7. TexturePacker的使用
  8. python有序字典实现代码
  9. 【转】VirtualBox direct access to SD Card in Windows--不错
  10. New Year Tree 【DFS序+先段数区间查询修改+二进制保存状态】
  11. 时间处理之strtotime
  12. 剑指Offer-删除链表中重复的结点
  13. IOS自带输入法中文不触发KEYUP事件导致vue双向绑定错误问题
  14. [物理学与PDEs]第4章第3节 一维反应流体力学方程组 3.1 一维反应流体力学方程组
  15. select获取选中的option(包含value和text,重点是text怎么获取)
  16. centos7 安装xinetd,telnet
  17. 版本控制工具Git的复杂用法的情境分析
  18. Chrome 调试技巧: 调整网速
  19. Java 8.9 游戏:井字游戏(C++&Java)
  20. Scala_控制结构

热门文章

  1. idea解决Command line is too long. Shorten command line for ServiceStarter or also for Application报错
  2. C#.NET 操作Windows服务(安装、卸载)
  3. CSP2020 自爆记
  4. Unique Path AGC 038 D
  5. R语言与医学统计图形【8】颜色的选取
  6. mysql-加密函数AES_DECRYPT函数
  7. Python爬虫3大解析库使用导航
  8. Linux-centos7设置静态IP地址
  9. 强化学习实战 | 自定义Gym环境之井字棋
  10. c/c++在线编译Output Limit Exceeded(OLE)错误