题解:

CDQ分治

三重分治

第一重排序

第二重CDQ

第三重树状数组

代码:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int n,m,c[N],dp[N],T;
struct node
{
int x,y,z,id;
}a[N],tmp[N];
struct Tree
{
int c[N];
inline int low(int x){return x&-x;}
inline void modify(int x){while (x<=N-)c[x]=,x+=low(x);}
inline void updata(int x){while (x<=N-)c[x]++,x+=low(x);}
inline void init(){memset(c,,sizeof c);}
inline int query(int x)
{
int ans=;
while (x)ans+=c[x],x-=low(x);
return ans;
}
}Tree;
inline int cmp(node x,node y)
{
if (x.x!=y.x)return x.x<y.x;
if (x.y!=y.y)return x.y<y.y;
return x.z<y.z;
}
inline int cmp1(node x,node y)
{
if (x.y!=y.y)return x.y<y.y;
return x.z<y.z;
}
inline void solve(int l,int r)
{
if (l==r)return;
int m=(l+r)>>;
solve(l,m);
for (int i=l;i<=r;i++)tmp[i]=a[i];
sort(tmp+l,tmp+m+,cmp1);
sort(tmp+m+,tmp+r+,cmp1);
int pl=l;
for (int i=m+;i<=r;i++)
{
while (pl<=m&&tmp[pl].y<=tmp[i].y)
{
Tree.updata(tmp[pl].z);
pl++;
}
dp[tmp[i].id]+=Tree.query(tmp[i].z);
}
for (int i=l;i<=m;i++)Tree.modify(tmp[i].z);
solve(m+,r);
}
inline int read()
{
int x=;char c;
for (;c<''||c>'';c=getchar());
for (;c>=''&&c<='';c=getchar())x=x*+c-;
return x;
}
inline void write(int x)
{
if (x>=)write(x/);
putchar(x%+);
}
int main()
{
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
for (int i=;i<=n;i++)
{
a[i].x=read();
a[i].y=read();
a[i].z=read();
a[i].id=i;
}
sort(a+,a+n+,cmp);
memset(dp,,sizeof dp);
Tree.init();
solve(,n);
for (int i=n-;i;i--)
if (a[i].x==a[i+].x&&a[i].y==a[i+].y&&a[i].z==a[i+].z)
dp[a[i].id]=dp[a[i+].id];
for (int i=;i<=n;i++)write(dp[i]),puts("");
}
}

hdu5618的更多相关文章

  1. HDU5618 & CDQ分治

    Description: 三维数点 Solution: 第一道cdq分治...感觉还是很显然的虽然题目不能再傻逼了... Code: /*=============================== ...

  2. HDU5618 Jam's problem again

    CDQ分治模板题 #include<cstdio> #include<cctype> #include<algorithm> #include<cstring ...

  3. hdu5618 (三维偏序,cdq分治)

    给定空间中的n个点,问每个点有多少个点小于等于自己. 先来分析简单的二维的情况,那么只要将x坐标排序,那么这样的问题就可以划分为两个子问题,,这样的分治有一个特点,即前一个子问题的解决是独立的,而后一 ...

  4. hdu5618(cdq分治求三维偏序)

    题意:给n(n<=100000)个点,坐标为(xi,yi,zi)(1<=xi,yi,zi<=100000),定义一个点A比一个点B小,当且仅当xA<=xB,yA<=yB, ...

  5. HDU5618 Jam's problem again CDQ分治

    Jam's problem again CDQ分治 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5618 题意: \[ 有n 个元素,第 i 个元素有 ...

随机推荐

  1. django通用视图

    通用视图 1. 前言 回想一下,在Django中view层起到的作用是相当于controller的角色,在view中实施的 动作,一般是取得请求参数,再从model中得到数据,再通过数据创建模板,返回 ...

  2. uchome 缓存生成

    一.uchome的缓存目录 ---------data此目录要有777权限 (1)模板文件缓存机制 1:在要显示的页面通过include template($name) 语句来包含被编译后的模板文件 ...

  3. SpringData环境搭建代码编写

    首先我们在前面的两节已经了解了SpringData是干什么用的?那我们从这节开始我们就开始编码测试SpringData. 1:首先我们从配置文件开始,我们首先需要写一个连接数据库的文件db.prope ...

  4. Java文件IO流的操作总结

    Java中的IO操作涉及到的概念及相关类很多,很容易弄混,今天特来整理总结一下,并附上一份完整的文件操作的代码. 概念解析 读和写 流就是管道,向管道里面写数据用输出流:write 从管道里面读数据, ...

  5. springcloud12---sidecar

    Sidecar:异构平台整合.做了一个桥 package com.itmuch.cloud; import org.springframework.boot.SpringApplication; im ...

  6. DB开发之postgresql

    1.环境变量配置: PGLIB=/usr/local/pgsql/lib PGDATA=$HOME/data PATH=$PATH:/usr/local/pgsql/bin MANPATH=$MANP ...

  7. CentOS6.5下Cloudera安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)

     不多说,直接上干货! 第一步: Cloudera Manager安装之Cloudera Manager安装前准备(CentOS6.5)(一) 第二步: Cloudera Manager安装之时间服务 ...

  8. SQL学习笔记三之MySQL表操作

    阅读目录 一 存储引擎介绍 二 表介绍 三 创建表 四 查看表结构 五 数据类型 六 表完整性约束 七 修改表ALTER TABLE 八 复制表 九 删除表 一 存储引擎介绍 存储引擎即表类型,mys ...

  9. Maven聚合项目在eclipse中显示没有层次

    大部分时间都在用idea做maven的项目,今天用eclipse导入了maven项目,果然不出所料,界面有显示问题,各个模块都堆叠在同一层级,根本看不出父项目与子项目之间的层次关系,见下图: 于是找修 ...

  10. 微信小程序:本地资源图片无法通过 WXSS 获取,可以使用网络图片或者 base64或者使用image标签

    微信小程序:本地资源图片无法通过 WXSS 获取,可以使用网络图片或者 base64或者使用image标签 一.问题 报错信息: VM696:2 pages/user/user.wxss 中的本地资源 ...