Valera and Queries

题目链接codeforces.com/problemset/problem/369/E

数据范围:略。


题解

这种题,就单独考虑一次询问即可。

我们发现,包括了至少一个给定点的个数,等于总个数减掉一个给定点都不包括的线段数。

一个都不包括,就表示这个线段的在两个给定点中间,这个可以把线段抽象成二维平面上的点,然后离线+树状数组查询。

代码

  1. #include <bits/stdc++.h>
  2.  
  3. #define N 1000010
  4.  
  5. using namespace std;
  6.  
  7. char *p1, *p2, buf[100000];
  8.  
  9. #define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )
  10.  
  11. int rd() {
  12. int x = 0;
  13. char c = nc();
  14. while (c < 48) {
  15. c = nc();
  16. }
  17. while (c > 47) {
  18. x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
  19. }
  20. return x;
  21. }
  22.  
  23. int cnt = 0;
  24.  
  25. struct Node {
  26. int x, y1, y2, id, c, opt;
  27. }a[N * 10];
  28.  
  29. inline bool cmp(const Node &a, const Node &b) {
  30. return a.x == b.x ? a.opt > b.opt : a.x < b.x;
  31. }
  32.  
  33. int q[N];
  34.  
  35. int tree[N];
  36.  
  37. inline int lowbit(int x) {
  38. return x & (-x);
  39. }
  40.  
  41. void update(int x) {
  42. for (int i = x; i < N; i += lowbit(i)) {
  43. tree[i] ++ ;
  44. }
  45. }
  46.  
  47. int query(int x) {
  48. int ans = 0;
  49. for (int i = x; i; i -= lowbit(i)) {
  50. ans += tree[i];
  51. }
  52. return ans;
  53. }
  54.  
  55. int ans[N];
  56.  
  57. int main() {
  58. int n = rd(), m = rd();
  59. // opt : 1 -> query, 2 -> update
  60. for (int i = 1; i <= n; i ++ ) {
  61. int x = rd(), y = rd();
  62. a[ ++ cnt] = (Node) {x, y, 0, 0, 1, 2};
  63. }
  64. // cout << cnt << endl ;
  65. for (int i = 1; i <= m; i ++ ) {
  66. int num = rd();
  67. for (int j = 1; j <= num; j ++ ) {
  68. q[j] = rd();
  69. }
  70. q[0] = 0;
  71. q[ ++ num] = N - 1;
  72. // cout << num << endl ;
  73. for (int j = 1; j <= num; j ++ ) {
  74. if (q[j] - q[j - 1] >= 2) {
  75. // printf("Fuck %d\n", j);
  76. int x = q[j - 1] + 1, y = q[j] - 1;
  77. a[ ++ cnt] = (Node) {x - 1, x, y, i, -1, 1};
  78. a[ ++ cnt] = (Node) {y, x, y, i, 1, 1};
  79. }
  80. }
  81. }
  82. // cout << cnt << endl ;
  83. sort(a + 1, a + cnt + 1, cmp);
  84. // for (int i = 1; i <= cnt; i ++ ) {
  85. // printf("%d %d %d %d %d %d\n", a[i].x, a[i].y1, a[i].y2, a[i].id, a[i].c, a[i].opt);
  86. // }
  87. for (int i = 1; i <= cnt; i ++ ) {
  88. // printf("id :: %d\n", i);
  89. if (a[i].opt == 2) {
  90. update(a[i].y1);
  91. }
  92. else {
  93. // cout << query(a[i].y2) << ' ' << query(a[i].y1) << ' ' << a[i].c << endl ;
  94. // cout << (query(a[i].y2) - query(a[i].y1)) * a[i].c << endl ;
  95. ans[a[i].id] += (query(a[i].y2) - query(a[i].y1)) * a[i].c;
  96. }
  97. }
  98.  
  99. for (int i = 1; i <= m; i ++ ) {
  100. printf("%d\n", n - ans[i]);
  101. }
  102. return 0;
  103. }

[CF369E]Valera and Queries_离线_树状数组的更多相关文章

  1. BZOJ_5055_膜法师_树状数组+离散化

    BZOJ_5055_膜法师_树状数组+离散化 Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然 ...

  2. BZOJ_3653_谈笑风生_树状数组

    BZOJ_3653_谈笑风生_树状数组 Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道 高明到哪里去了”. ...

  3. BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树

    BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排 ...

  4. BZOJ_2141_排队_树状数组+分块

    BZOJ2141_排队_树状数组+分块 Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了 ...

  5. BZOJ_3132_上帝造题的七分钟_树状数组

    BZOJ_3132_上帝造题的七分钟_树状数组 Description “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b), ...

  6. 【loj6041】「雅礼集训 2017 Day7」事情的相似度 后缀自动机+STL-set+启发式合并+离线+扫描线+树状数组

    题目描述 给你一个长度为 $n$ 的01串,$m$ 次询问,每次询问给出 $l$ .$r$ ,求从 $[l,r]$ 中选出两个不同的前缀的最长公共后缀长度的最大值. $n,m\le 10^5$ 题解 ...

  7. 【bzoj4540】[Hnoi2016]序列 单调栈+离线+扫描线+树状数组区间修改区间查询

    题目描述 给出一个序列,多次询问一个区间的所有子区间最小值之和. 输入 输入文件的第一行包含两个整数n和q,分别代表序列长度和询问数.接下来一行,包含n个整数,以空格隔开,第i个整数为ai,即序列第i ...

  8. BZOJ1878: [SDOI2009]HH的项链 (离线查询+树状数组)

    1878: [SDOI2009]HH的项链 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1878 Description: HH有一串由 ...

  9. HDU 4746 莫比乌斯反演+离线查询+树状数组

    题目大意: 一个数字组成一堆素因子的乘积,如果一个数字的素因子个数(同样的素因子也要多次计数)小于等于P,那么就称这个数是P的幸运数 多次询问1<=x<=n,1<=y<=m,P ...

随机推荐

  1. Python多线程笔记(三),queue模块

    尽管在Python中可以使用各种锁和同步原语的组合编写非常传统的多线程程序,但有一种首推的编程方式要优于其他所有编程方式即将多线程程序组织为多个独立人物的集合,这些任务之间通过消息队列进行通信 que ...

  2. Ansible管理上千台主机时需要的速度优化

    1 开启ssh长连接 OpenSSH 5.6版本后SSH支持了Multiplexing 设置参数 ssh_args = -C -o ControlMaster=auto -o ControlPersi ...

  3. 命令行中生成 md5、sha1、sha256 校验和

    在测试过程中有时候需要对某个文件Hash值进行校验,如接口返回一个文件下载地址及hash值,那么除了对比平台端展示和接口下发是否一至,还有一个办法就是命令行使用相关命令 1.Window 注:我是在g ...

  4. C语言应用--数据类型定制一定义和引用

    目前,定制正在变的越来越普遍,定制服务.定制衣服.甚至使用的键盘都是定制了.在C语言中虽然也包括了整型.字符型和浮点型等基本类型,也有基本的组合数据类型数组.但是这些类型都是针对某一种特定类型时应用没 ...

  5. 解决微信小程序要求TLS版本不低于1.2问题

    客官,本文可在我的小站中看到哦 昨天项目服务器发生意外,其上的IIS服务无法使用,导致项目后台瘫痪,倒腾一番最终以无法修复告终,启用备用的服务器,从安装IIS环境开始,然后最后所有的东西都准备就绪,却 ...

  6. Fiddler自动响应AutoResponder正则匹配

    AutoResponder-Add-Rule Editor 两个文本框,先说第一个: Mathes: 前缀为“EXACT:”表示完全匹配(大小写敏感) 无前缀表示基本搜索,表示搜索到字符串就匹配 前缀 ...

  7. java 接口和抽象类的一个最大的区别

    写在前面,下面是在百度百科上看到的,之前就看过,这次再看感觉有更深的体会,真的是这样,每一个脚印都会留下痕迹 java接口和java抽象类有太多相似的地方,又有太多特别的地方,这里说下两者之间的一个最 ...

  8. osg::NodeVisitor example

    [0]osg::Group [1]osg::MatrixTransform [1] osg::MatrixTransform [1]osg::MatrixTransform [2] osg::Geod ...

  9. 19 Flutter 自定义AppBar 定义顶部Tab切换 底部Tab结合顶部Tab实现类似头条页面布局(27分36秒)

    Flutter AppBar自定义顶部导航按钮图标.颜色以及TabBar定义顶部Tab切换. leading:在标题前面显示的一个控件,在首页通常显示应用的logo:在其他界面通常显示为付汇按钮. t ...

  10. JVM参数详细说明

    JVM参数详细说明   答: 下面红色部分是常用参数 -XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS回收-XX:CMSInit ...