Stars-POJ 2352


求解没有重复项的包含子集的个数。

我们直接求其贡献,对于一维偏序x坐标进行升序排序,对于二维偏序y坐标进行分治,我们从递归至底层,然后向上更新,对于左右子树,左子树的x一定是小于右子树的任意一个点的x坐标,所以我们求对右子树的贡献的时候,可以直接比较y坐标的大小。

并且,对于已经处理完的左右区间,y是单调的。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 15007;
int N, M, level[maxN] = {0}, ans[maxN];
struct node
{int x, y, id;node(int a=0, int b=0):x(a), y(b) {}friend bool operator < (node e1, node e2) { return e1.x == e2.x ? e1.y < e2.y : e1.x < e2.x; }
}q[maxN], cop[maxN];
void cdq(int l, int r)
{if(l == r) return;int mid = HalF;cdq(l, mid); cdq(mid + 1, r);int ql = l, qr = mid + 1, pos = l;while(ql <= mid || qr <= r){if(qr > r || (ql <= mid && q[ql].y <= q[qr].y)) cop[pos++] = q[ql++];else { level[q[qr].id] += ql - l; cop[pos++] = q[qr++]; }}for(int i=l; i<=r; i++) q[i] = cop[i];
}
int main()
{scanf("%d", &N);for(int i=1; i<=N; i++) { scanf("%d%d", &q[i].x, &q[i].y); q[i].id = i; }sort(q + 1, q + N + 1);cdq(1, N);for(int i=1; i<=N; i++) ans[level[i]]++;for(int i=0; i<N; i++) printf("%d\n", ans[i]);return 0;
}

CDQ分治解二维偏序相关推荐

  1. CDQ分治(二维CDQ 、三维CDQ+树状数组、四维CDQ+CDQ+树状数组)

    CDQ分治 CDQ分治相较于普通分治,多了左区间处理后对于右区间的影响. 利用这一点,CDQ分治可以用来做很多数据结构的题目(树状数组.线段树),加一个log的时间复杂度来优化一维. 操作: 假设有两 ...

  2. 【BZOJ-3262】陌上花开 CDQ分治(3维偏序)

    3262: 陌上花开 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 1439  Solved: 648 [Submit][Status][Discu ...

  3. BZOJ2244: [SDOI2011]拦截导弹(CDQ分治,二维LIS,计数)

    Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截任意速度的导弹,但是以后每一发炮弹都不能高 ...

  4. poj2481树状数组解二维偏序

    按区间r降序排列,r相同按照l升序排列,两个区间相同时特判一下即可 /* 给定n个闭区间[l,r],如果对区间[li,ri],[lj,rj]来说, 有区间j严格包含(两个边界不能同时重合)在区间i内, ...

  5. 【牛客NOIP模拟】 牛牛的RPG游戏【二维偏序】【任意坐标斜率优化】【CDQ 分治】【李超线段树】

    题意: n×mn\times mn×m 的网格图,每个点有两个权值 vali,j,bufi,jval_{i,j},buf_{i,j}vali,j​,bufi,j​,从 (1,1)(1,1)(1,1) ...

  6. Nowcoder farm ( 树状数组、二维前缀和、二维偏序 )

    题目链接 分析 : 最简单的想法当然就是去模拟 直接对每个施肥料的操作进行模拟.然后计算贡献 但是这显然会超时.这题需要换一个思维 对于一个土地(也就是二维平面上的一个点)的种类是 T' 如果它被操作 ...

  7. 【数据结构】二维数点/二维偏序

    该内容需要有一定的数据结构基础,前置知识:二维前缀和.树状数组.线段树.扫描线等 二维数点的解法较多,可自行查找和学习其他解法 二维数点简介 二维数点又称二维偏序,它是这样一类问题,给出一个二维平面內 ...

  8. 模型——二维偏序与三维偏序

     蒟蒻不会二维偏序 二维偏序 二维偏序的定义  定义:形如xi<xjx_i<x_jxi​<xj​且yi<yjy_i<y_jyi​<yj​之类的约束条件,我们可以称为 ...

  9. 飘雪圣域 [树状数组(二维偏序)]

    飘 雪 圣 域 飘雪圣域 飘雪圣域 正 解 部 分 \color{red}{正解部分} 正解部分 首 先 要 知 道 : 首先要知道: 首先要知道: 若给定一个区间 [ l , r ] [l, r] ...

最新文章

  1. 漫画 | 如果程序员的妈是产品经理,她会如何逼你结婚?
  2. Spring 的@Scheduled注解实现定时任务运行和调度
  3. HenCoder Android UI 部分 2-3 定制 Layout 的内部布局
  4. (水题)987654321 problem -- SGU 107
  5. html5与课程思政,“课程思政”怎样做
  6. leetcode 1269. 停在原地的方案数(dp)
  7. iBeacon 初探
  8. 二维小波变换_【外文文献速读】实时二维水波模拟
  9. JavaApplet 绘制火柴棒和轮播图片
  10. Windwows7 下安装mysql5
  11. 佳易王收银管理软件和扫码通M800大部分扫码支付平台对接步骤:
  12. SQL Server中Id自增列的最大Id是多少
  13. I hope this letter finds you well-个人博客22-11-26
  14. Elasticsearch Java API之计数(HighLevelClient)
  15. nextTick介绍
  16. 基于空间平滑MUSIC算法的相干信号DOA估计(2)
  17. 音视频笔记-视锥细胞和视杆细胞的区别
  18. 了解一下ACM/ICPC比赛时间
  19. Windows下安装CMake教程
  20. 超详细【Uboot驱动开发】(一)uboot基础了解

热门文章

  1. 三星I9100有时不能收发彩信完美解决!中国移动
  2. Tunnels HDU - 4856
  3. php服务器性能计算,PHPTS 边缘计算服务器套件
  4. 基于51单片机电子贺卡全套设计
  5. popstate_H5,API的pushState(),replaceState()和popstate()用法
  6. Linux安装tomcat、无法启动的解决方案
  7. Quora’s Technology Examined
  8. 算法:三数之和(js)
  9. 架构师成长之路:如何做基础框架设计?架构师落地的核心能力
  10. mysql+php+模板+条目_PHP.MVC的模板标签系统(五)