思路:主席树搞一搞。

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. #define fi first
  4. #define se second
  5. #define mk make_pair
  6. #define PII pair<int, int>
  7. #define y1 skldjfskldjg
  8. #define y2 skldfjsklejg
  9. using namespace std;
  10.  
  11. const int N = 1e5 + ;
  12. const int inf = 0x3f3f3f3f;
  13. const LL INF = 0x3f3f3f3f3f3f3f3f;
  14. const int mod = ;
  15.  
  16. int hs1[N], hs2[N], mnX[N], mxX[N], mnY[N], mxY[N], tot1, tot2, n;
  17. int root[][N];
  18.  
  19. struct Point {
  20. int x, y;
  21. Point(int _x = , int _y = ) {
  22. x = _x; y = _y;
  23. }
  24. } a[N];
  25.  
  26. struct Chairman_tree {
  27. int tot;
  28. struct node {
  29. int sum, l, r;
  30. } a[N * ];
  31. void update(int p, int l, int r, int &x, int y) {
  32. x = ++tot; a[x] = a[y]; a[x].sum++;
  33. if(l == r) return;
  34. int mid = l + r >> ;
  35. if(p <= mid) update(p, l, mid, a[x].l, a[y].l);
  36. else update(p, mid + , r, a[x].r, a[y].r);
  37. }
  38. int query(int L, int R, int l, int r, int x, int y) {
  39. if(L > R) return ;
  40. if(l >= L && r <= R) return a[x].sum - a[y].sum;
  41. int mid = l + r >> , ans = ;
  42. if(L <= mid) ans += query(L, R, l, mid, a[x].l, a[y].l);
  43. if(R > mid) ans += query(L, R, mid + , r, a[x].r, a[y].r);
  44. return ans;
  45. }
  46. } ct[];
  47.  
  48. int main() {
  49. ct[].tot = ct[].tot = ;
  50. memset(mnX, inf, sizeof(mnX));
  51. memset(mnY, inf, sizeof(mnY));
  52. memset(mxX, , sizeof(mxX));
  53. memset(mxY, , sizeof(mxY));
  54. scanf("%d", &n);
  55. for(int i = ; i <= n; i++) {
  56. scanf("%d%d", &a[i].x, &a[i].y);
  57. hs1[++tot1] = a[i].x;
  58. hs2[++tot2] = a[i].y;
  59. }
  60. sort(hs1 + , hs1 + + tot1);
  61. sort(hs2 + , hs2 + + tot2);
  62. tot1 = unique(hs1 + , hs1 + + tot1) - hs1 - ;
  63. tot2 = unique(hs2 + , hs2 + + tot2) - hs2 - ;
  64.  
  65. for(int i = ; i <= n; i++) {
  66. a[i].x = lower_bound(hs1 + , hs1 + + tot1, a[i].x) - hs1;
  67. a[i].y = lower_bound(hs2 + , hs2 + + tot2, a[i].y) - hs2;
  68. mnX[a[i].x] = min(mnX[a[i].x], a[i].y);
  69. mxX[a[i].x] = max(mxX[a[i].x], a[i].y);
  70. mnY[a[i].y] = min(mnY[a[i].y], a[i].x);
  71. mxY[a[i].y] = max(mxY[a[i].y], a[i].x);
  72. }
  73.  
  74. for(int i = ; i <= tot2; i++) {
  75. ct[].update(mnY[i], , tot1, root[][i], root[][i - ]);
  76. ct[].update(mxY[i], , tot1, root[][i], root[][i - ]);
  77. }
  78.  
  79. LL ans = ;
  80.  
  81. for(int i = ; i <= tot1; i++) {
  82. ans += mxX[i] - mnX[i] + ;
  83. ans -= ct[].query(i + , tot1, , tot1, root[][mxX[i]], root[][mnX[i]-]);
  84. ans -= ct[].query(, i - , , tot1, root[][mxX[i]], root[][mnX[i]-]);
  85. }
  86.  
  87. printf("%lld\n", ans);
  88. return ;
  89. }

bzoj 1818 主席树的更多相关文章

  1. bzoj 1901 主席树+树状数组

    修改+查询第k小值 单纯主席树修改会打乱所有,所以再套一个树状数组维护前缀和使得修改,查询都是log 对了,bzoj上不需要读入组数,蜜汁re.. #include<cstdio> #in ...

  2. BZOJ 2588 主席树

    思路: 主席树 做完BZOJ 3123 觉得这是道水啊-- 然后狂RE 狂MLE 要来数据 忘把deep[1]设成1了----------. 啊wocccccccccccccccc //By Siri ...

  3. BZOJ 4771 主席树+倍增+set

    思路: 因为有深度的限制,并且我们是在线段树上维护权值,所以我们把点按照dep排序,然后一个一个修改...主席树的下标就是dfs序,子树的查询就是区间查询... 但是发现这样怎么去维护LCA呢...因 ...

  4. BZOJ 3674/BZOJ 3673 主席树

    思路: 主席树维护可持久化数组 剩下的就是普通的并查集了- //By SiriusRen #include <cstdio> #include <cstring> #inclu ...

  5. BZOJ 3123 主席树 启发式合并

    思路: 主席树 搞树上的k大 x+y-lca(x,y)-fa(lca(x,y)) 按照size小树往大树上插 启发式合并 n*log^2n的 搞定~ //By SiriusRen #include & ...

  6. BZOJ 4448 主席树+树链剖分(在线)

    为什么题解都是离线的-- (抄都没法抄) 搞一棵主席树 1 操作 新树上的当前节点设成1 2 操作 查max(i-xx-1,0)那棵树上这条路径上有多少个点是1 让你找经过了多少个点 查的时候用dee ...

  7. BZOJ 3524主席树裸题 (雾)

    思路: 按权值建一棵主席树 (但是这好像不是正解 空间复杂度是不对的--.) //By SiriusRen #include <cstdio> #include <cstring&g ...

  8. BZOJ 3524 - 主席树

    传送门 题目分析 标准主席树,按照位置插入每个数,对于询问l, r, 在l-1,r两树上按照线段树搜索次数大于(r - l + 1) / 2的数. code #include<bits/stdc ...

  9. BZOJ 3932 - 主席树

    传送门 题目分析 在只打会主席树模板的情况下做了这道题,也算是深有体会. 首先任务可以差分:一个任务是(s, e, p), 则在s处+1, 在e+1处-1,符合前缀.但是我们要查询指定时间的前k任务之 ...

随机推荐

  1. json数据的格式

    JSON的具体形式 1.对象是一个无序的“‘名称/值’对”集合.一个对象以“{”开始,以“}”结束.每个“名称”后跟一个“:”,“‘名称/值’对”之间使用“,”分隔. 举个例子: { name:&qu ...

  2. 题解 P3153 【[CQOI2009]跳舞】

    P3153 [CQOI2009]跳舞 题目描述 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲.有一些男孩女孩相互喜欢 ...

  3. gcc和MinGW的异同

    cygwin/gcc和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器. cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从 ...

  4. Vue 插槽详解

    Vue插槽,是学习vue中必不可少的一节,当初刚接触vue的时候,对这些掌握的一知半解,特别是作用域插槽一直没明白. 后面越来越发现插槽的好用. 分享一下插槽的一些知识吧. 分一下几点: 1.插槽内可 ...

  5. MySQL免安装版配置部署

    MySQL下载地址:http://dev.mysql.com/downloads/mysql/ 1.Windows下安装MySQL 我下的是最新版的MySQL,解压后,目录如下: 将解压目录下默认文件 ...

  6. NOIP 2014 提高组 Day1

    期望得分:100+100+50=250 实际得分:100+100+50=250 此次NOIP  ZJ省一分数线:500,SD:345 https://www.luogu.org/problem/lis ...

  7. 数学&搜索:博弈论之极大极小搜索与alpha-beta减枝

    目的是寻找最优的方案使得自己能够利益最大化. 基本思想就是假设自己(A)足够聪明,总是能选择最有利于自己的方案,而对手(B)同样足够聪明,总会选择最不利A的方案 对抗搜索就是对于先手来说,取后手中状态 ...

  8. LightOJ 1239 - Convex Fence 凸包周长

    LINK 题意:类似POJ的宫殿围墙那道,只不过这道题数据稍微强了一点,有共线的情况 思路:求凸包周长加一个圆周长 /** @Date : 2017-07-20 15:46:44 * @FileNam ...

  9. 816B. Karen and Coffee 前缀和思维 或 线段树

    LINK 题意:给出n个[l,r],q个询问a,b,问被包含于[a,b]且这样的区间数大于k个的方案数有多少 思路:预处理所有的区间,对于一个区间我们标记其(左边界)++,(右边界+1)--这样就能通 ...

  10. Android 菜单和上下文演示

    在Action添加个TextView控件(上下文演示用); package com.example.test; import android.app.Activity;import android.o ...